Chuyển dữ liệu từ list view vào sheet (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thesaintzero

Thành viên hoạt động
Tham gia
16/3/09
Bài viết
158
Được thích
8
Mình có 1 form thế này, mình tạo 2 textbox có name là textbox1 và textbox2, 1 listview có name là listview1, và 3 nút command có name là commandbutton1, commandbutton2 và commandbutton3.
Nút commandbutton1 là nút gán từ textbox vào listview...... cái này thì mình làm xong rùi, nhưng sao cái code gán vào sheet của commandbutton3 thì nó bị lỗi, không biết bị gì, mong các cao thủ chỉ giáo.............
code đây.... mong các cao thủ chỉ dùm chỗ sai.......

Private Sub commandbutton3_Click()
On Error Resume Next
Dim BC As Long, iLB As Long
With Sheet1
BC = .Range("A65000").End(xlUp).Row
For iLB = 0 To Me.ListView1.ListItems - 1
HC = HC + 1
.Range("A" & BC) = HC - 1
.Range("B" & BC) = Me.ListView1.ListItems.Add(iLB, 1)
.Range("C" & BC) = Me.ListView1.ListItems.Add(iLB, 2)
Next
End With
Me.ListView1.ListItems.Clear
End Sub
 
Mình có 1 form thế này, mình tạo 2 textbox có name là textbox1 và textbox2, 1 listview có name là listview1, và 3 nút command có name là commandbutton1, commandbutton2 và commandbutton3.
Nút commandbutton1 là nút gán từ textbox vào listview...... cái này thì mình làm xong rùi, nhưng sao cái code gán vào sheet của commandbutton3 thì nó bị lỗi, không biết bị gì, mong các cao thủ chỉ giáo.............
code đây.... mong các cao thủ chỉ dùm chỗ sai.......

Private Sub commandbutton3_Click()
On Error Resume Next
Dim BC As Long, iLB As Long
With Sheet1
BC = .Range("A65000").End(xlUp).Row
For iLB = 0 To Me.ListView1.ListItems - 1
HC = HC + 1
.Range("A" & BC) = HC - 1
.Range("B" & BC) = Me.ListView1.ListItems.Add(iLB, 1)
.Range("C" & BC) = Me.ListView1.ListItems.Add(iLB, 2)
Next
End With
Me.ListView1.ListItems.Clear
End Sub
Gửi bạn cái ví dụ về cách nhập Listview và xuất ra sheet ở file đính kèm
 

File đính kèm

Upvote 0
Bác Hai Lúa Miền Tây ơi cho em hỏi cái, sao mà em down file của bác về nó thông báo lỗi này vậy? Untitled.jpgmặc dù máy em đã có cài bộ object rùi, mở cái listview của mấy tập tin khác thì bình thường, còn của bác nó thông báo là không tìm thấy listview1 ........ah! mà bác xài office cao quá, máy cơ quan em chỉ có 2003 thui, nền phải chờ hết giờ, về nhà mới reply cho bác đc...
 
Upvote 0
Bác Hai Lúa Miền Tây ơi cho em hỏi cái, sao mà em down file của bác về nó thông báo lỗi này vậy? mặc dù máy em đã có cài bộ object rùi, mở cái listview của mấy tập tin khác thì bình thường, còn của bác nó thông báo là không tìm thấy listview1 ........ah! mà bác xài office cao quá, máy cơ quan em chỉ có 2003 thui, nền phải chờ hết giờ, về nhà mới reply cho bác đc...

Tốt nhất là bạn đừng bao giờ xài Listview vì nó luôn bị như thế
Nói tóm lại: Tự mình tạo ra Listview thì tự mình xài, mang sang máy tính khác sẽ luôn có rủi ro
 
Upvote 0
Tốt nhất là bạn đừng bao giờ xài Listview vì nó luôn bị như thế
Nói tóm lại: Tự mình tạo ra Listview thì tự mình xài, mang sang máy tính khác sẽ luôn có rủi ro

Sao mình dùng Listview cũng nhiều, kể cả đưa file cho đồng nghiệp dùng mà chưa bao giờ bị lỗi về Listview nhỉ, vì vậy cũng chưa bỏ được vì sự tiện dụng của nó.
 
Upvote 0
Em cũng giống như bác "thanhlanh" vậy, vì nếu tạo listbox thì lại càng nhiều lỗi hơn, trong listview thì thấy tiện dụng hơn....... mặc dù cú pháp của listbox lại dễ nhận biết hơn listview.......nhưng sao em làm mấy cái listview cũng chuyển qua nhiều máy mà không có vấn đề gì? chỉ khi mở file của bác "Hai Lúa Miền Tây" thì nó báo lỗi thế, nó báo trong VB là "missing microsoft windows common controls 6.0 sp6" cũng chả hiểu tại sao nữa, bình thường thì nó nằm ở đó, mở file của bác ra thì nó lại báo lỗi :v.
Sẵn đây nhờ các bác xem dùm em file này, code em chèn thêm của bác "Hai Lua Miền Tây" ko bik tại sao mà 2 code của 2 commanddbutton khác nhau, khi chạy vs nhau thì nó lại sai, còn khi chạy độc lập thì vẫn bình thường........Ở đây em nói tới là khi gán từ textbox vào listview thì STT vẫn chạy bình thường theo thứ tự...... bấm chèn vào sheet thì nó chèn đc 1 dòng, trở lại bấm gán từ textbox vào listview thì nó lại lấy thêm số STT trong sheet để chèn vào...... Các bác xem file đính kèm dùm em nha! thú thực thì cũng là code của các bác trên diễn đàn cả, nhưng em muốn hoàn thiện 1 cái gì đó cho riêng bản thân mình, nên mày mò học hỏi thui....... mong các bác thông cảm cho em........
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em cũng giống như bác "thanhlanh" vậy, vì nếu tạo listbox thì lại càng nhiều lỗi hơn, trong listview thì thấy tiện dụng hơn....... mặc dù cú pháp của listbox lại dễ nhận biết hơn listview.......nhưng sao em làm mấy cái listview cũng chuyển qua nhiều máy mà không có vấn đề gì? chỉ khi mở file của bác "Hai Lúa Miền Tây" thì nó báo lỗi thế, nó báo trong VB là "missing microsoft windows common controls 6.0 sp6" cũng chả hiểu tại sao nữa, bình thường thì nó nằm ở đó, mở file của bác ra thì nó lại báo lỗi :v.
Sẵn đây nhờ các bác xem dùm em file này, code em chèn thêm của bác "Hai Lua Miền Tây" ko bik tại sao mà 2 code của 2 commanddbutton khác nhau, khi chạy vs nhau thì nó lại sai, còn khi chạy độc lập thì vẫn bình thường........Ở đây em nói tới là khi gán từ textbox vào listview thì STT vẫn chạy bình thường theo thứ tự...... bấm chèn vào sheet thì nó chèn đc 1 dòng, trở lại bấm gán từ textbox vào listview thì nó lại lấy thêm số STT trong sheet để chèn vào...... Các bác xem file đính kèm dùm em nha! thú thực thì cũng là code của các bác trên diễn đàn cả, nhưng em muốn hoàn thiện 1 cái gì đó cho riêng bản thân mình, nên mày mò học hỏi thui....... mong các bác thông cảm cho em........

Bạn diễn tả rất khó hiểu, đoán ý của bạn mệt hơn sửa code, sửa đại theo ý mình, trúng trật tính sau.
Thay code này vào co de tương ứng của bạn:

Mã:
Private Sub CommandButton3_Click()
    Dim row As Long, col As Integer, [COLOR=#0000cd]EndRow As Long[/COLOR]
    For row = 2 To ListView1.ListItems.Count + 1
[COLOR=#0000cd]        EndRow = Range("A65536").End(xlUp).row + 1[/COLOR]
        For col = 1 To ListView1.ColumnHeaders.Count
            If col = 1 Then
                Sheet1.Cells([COLOR=#ff0000]EndRow[/COLOR], col).Value = ListView1.ListItems(row - 1).Text
            Else
                Sheet1.Cells([COLOR=#ff0000]EndRow[/COLOR], col).Value = ListView1.ListItems(row - 1).SubItems(col - 1)
            End If
        Next col
    Next row
[COLOR=#ff0000]    ListView1.ListItems.Clear[/COLOR]
End Sub
Màu xanh: Thêm vào, màu đỏ: Sửa
 
Upvote 0
Cám ơn bác ThanhLanh bác trị đúng bệnh của em rùi, :) , bác cho em hỏi cái tại sao mình phải thêm dòng này vào EndRow = Range("A65536").End(xlUp).row + 1 trong khi listview của mình đã được cho sẵn giá trị, và nút "gan" không dính dáng gì đến lệnh của "dua vao sh" sao nó lại lấy dòng khi mình bấm vào để nó bỏ qua số thứ tự tiếp theo.
Vd: khi em gán nó vào listview thì nó là STT số 1, em đưa vào sh thì nó là STT số 1, trở về textbox em gán vào listview thì nó ra tiếp là STT số 3 không phải là STT số 2.......... ý em là như thế?
 
Upvote 0
Cám ơn bác ThanhLanh bác trị đúng bệnh của em rùi, :) , bác cho em hỏi cái tại sao mình phải thêm dòng này vào EndRow = Range("A65536").End(xlUp).row + 1 trong khi listview của mình đã được cho sẵn giá trị, và nút "gan" không dính dáng gì đến lệnh của "dua vao sh" sao nó lại lấy dòng khi mình bấm vào để nó bỏ qua số thứ tự tiếp theo.
Vd: khi em gán nó vào listview thì nó là STT số 1, em đưa vào sh thì nó là STT số 1, trở về textbox em gán vào listview thì nó ra tiếp là STT số 3 không phải là STT số 2.......... ý em là như thế?

Vẫn không hiểu bạn muốn hỏi gì, chắc tại mình ngu! hichic
Thôi thì giải thích đoạn code trên cho bạn hiểu và tùy biến.


Mã:
[COLOR=#000000]Private Sub CommandButton3_Click()
   [/COLOR]Dim row As Long, col As Integer, [COLOR=#0000cd]EndRow As Long ' Khai bao[/COLOR]
    For row = 2 To ListView1.ListItems.Count + 1 ' Dò từng dòng trong sanh sách của Lv (Listview)
[COLOR=#0000cd]        EndRow = Range("A65536").End(xlUp).row + 1 ' tìm dòng cuối của cột A trong Sheet hiện hành cộng thêm 1 (xuống dòng mới)[/COLOR]
        For col = 1 To ListView1.ColumnHeaders.Count ' dò từng cột trong Lv
            If col = 1 Then
                Sheet1.Cells([COLOR=#ff0000]EndRow[/COLOR], col).Value = ListView1.ListItems(row - 1).Text ' Gán cột thứ nhất của dòng mới của Sheet1 bằng cột thứ nhất của Lv
            Else
                Sheet1.Cells([COLOR=#ff0000]EndRow[/COLOR], col).Value = ListView1.ListItems(row - 1).SubItems(col - 1) ' Gán các cột còn lại vào dòng mới
            End If
        Next col
    Next row
[COLOR=#ff0000]    ListView1.ListItems.Clear ' Xóa danh sách trong Lv[/COLOR]
End Sub

Code trên có thể sửa lại như sau, khỏi vào Sheet xác định dòng cuối nhiều lần mất thời gian (có thể gây chậm khi chạy code):

Mã:
Private Sub CommandButton3_Click()
    Dim row As Long, col As Integer, [COLOR=#0000cd]EndRow As Long, i as Long
[/COLOR]    [COLOR=#0000CD][FONT=Verdana]EndRow = Range("A65536").End(xlUp).row[/FONT][/COLOR]
    i = [COLOR=#0000CD][FONT=Verdana]EndRow [/FONT][/COLOR]
    For row = 2 To ListView1.ListItems.Count + 1
[COLOR=#0000cd]        i = i + 1[/COLOR]
        For col = 1 To ListView1.ColumnHeaders.Count
            If col = 1 Then
                Sheet1.Cells([COLOR=#ff0000]i[/COLOR], col).Value = ListView1.ListItems(row - 1).Text
            Else
                Sheet1.Cells([COLOR=#ff0000]i[/COLOR], col).Value = ListView1.ListItems(row - 1).SubItems(col - 1)
            End If
        Next col
    Next row
[COLOR=#ff0000]    ListView1.ListItems.Clear[/COLOR]
End Sub
Thực ra i và EndRow là một nhưng tôi phải tách ra cho bạn dễ hiểu
 
Lần chỉnh sửa cuối:
Upvote 0
Sao mình dùng Listview cũng nhiều, kể cả đưa file cho đồng nghiệp dùng mà chưa bao giờ bị lỗi về Listview nhỉ, vì vậy cũng chưa bỏ được vì sự tiện dụng của nó.

Anh thử tạo Listview trên Excel 2003 rồi "vác" sang máy dùng Excel 2010 xem thử. Hoặc ngược lại, tạo Listview trên Excel 2010 rồi "vác" sang máy dùng Excel 2003
Nói chung cái vụ Listview này đã bàn rất nhiều lần trên diễn đàn rồi (tại anh chưa thấy nên chưa tin thôi)
Có thể hỏi ông "chuyên gia" từng "sừng bái" Listview là Hoàng Trọng Nghĩa sẽ rõ
 
Upvote 0
Anh thử tạo Listview trên Excel 2003 rồi "vác" sang máy dùng Excel 2010 xem thử. Hoặc ngược lại, tạo Listview trên Excel 2010 rồi "vác" sang máy dùng Excel 2003
Nói chung cái vụ Listview này đã bàn rất nhiều lần trên diễn đàn rồi (tại anh chưa thấy nên chưa tin thôi)
Có thể hỏi ông "chuyên gia" từng "sừng bái" Listview là Hoàng Trọng Nghĩa sẽ rõ
Xin thưa với bạn là Listview mình tạo từ ngày mình chỉ có Excel 2003, và bây giờ mình vẫn xài cho mọi phiên bản của máy nhà, máy cơ quan, máy bạn ... chỉ thiếu Excel 2013 chưa xài thôi. Không tin tải chương trình tại chữ ký của mình trong đó có Listview tạo từ ngày chỉ có Ex2003 đó.

Vì vậy mình có thể nhận định (chưa chắc đúng): Cái Listview khi tạo ra có vấn đề (thì sẽ luôn có vấn đề, ví dụ trong file của HLMT) còn không thì không vấn đề gì! hihihi. mình thấy có 2 dạng (mẫu) Listview trong System luôn đó (khi add control).
 
Upvote 0
Xin thưa với bạn là Listview mình tạo từ ngày mình chỉ có Excel 2003, và bây giờ mình vẫn xài cho mọi phiên bản của máy nhà, máy cơ quan, máy bạn ... chỉ thiếu Excel 2013 chưa xài thôi. Không tin tải chương trình tại chữ ký của mình trong đó có Listview tạo từ ngày chỉ có Ex2003 đó.

Vì vậy mình có thể nhận định (chưa chắc đúng): Cái Listview khi tạo ra có vấn đề (thì sẽ luôn có vấn đề, ví dụ trong file của HLMT) còn không thì không vấn đề gì! hihihi. mình thấy có 2 dạng (mẫu) Listview trong System luôn đó (khi add control).
Như em đã nói ở trên: Ai tạo Listview người nấy xài là tốt nhất
Anh nói chắc ăn vậy khiến em phải mất công tải chương trình của anh về cài và cuối cùng thì em đã tin: File của anh cũng bị lỗi trên máy em
Ẹc... Ẹc...
 
Upvote 0
Như em đã nói ở trên: Ai tạo Listview người nấy xài là tốt nhất
Anh nói chắc ăn vậy khiến em phải mất công tải chương trình của anh về cài và cuối cùng thì em đã tin: File của anh cũng bị lỗi trên máy em
Ẹc... Ẹc...

Nhờ ndu chụp hình lỗi giùm để mình khắc phục, mình nghi không phải là lỗi Listview. Vì muốn thử Listview thì chương trình phải khởi động suông sẻ xong (không có thông báo lỗi) -> vào Sheets "KhoiLuong" bấm phải vào cột C -> bấm tìm mã hiệu mới hiện LV). Giúp với nha!
 
Upvote 0
Chính xác là em đã từng sử dụng Listview, nó sẽ phát sinh lỗi như trên đối với 1 số máy.
 
Upvote 0
Nhờ ndu chụp hình lỗi giùm để mình khắc phục, mình nghi không phải là lỗi Listview. Vì muốn thử Listview thì chương trình phải khởi động suông sẻ xong (không có thông báo lỗi) -> vào Sheets "KhoiLuong" bấm phải vào cột C -> bấm tìm mã hiệu mới hiện LV). Giúp với nha!

Đây anh:
[video=youtube;VRLy2NlFjqc]https://www.youtube.com/watch?v=VRLy2NlFjqc[/video]
 
Upvote 0
Cảm ơn ndu! Lỗi này cho thấy không cho khởi động chương trình, chưa đụng gì đến Listview cả.
Mà hình như bạn dùng máy ảo? Chương trình này "sạch" và Uninstall sạch sẽ không để lại gì trong máy đâu.
Lạ thật mình kiểm tra toàn bộ code của mình không có cái Msgbox như vậy, đau đầu thật.
 
Upvote 0
Đúng là cái listview sẽ không hoạt động (hoặc không chạy trên 2013 thật, nhưng trên 2010 em test thì vẫn thấy bình thường, các file khác đều tạo thử và mở lần lượt trên từng phiên bản của excel), nhưng chỉ khi tới 2013 là nó xuất hiện lỗi như của bác HLMT, khi nó xuất hiện như thế thì khi mở lại các phiên bản cũ nó cũng bị lỗi y chang thế mặc dù em không save....... em chỉ set lại cho từng phiên bản chạy thui ^^!..... không biết là do đâu nhỉ? em không nghĩ là xung đột phiên bản đâu, vì em chạy nó cũng bình thường chỉ tới khi phát hiện ra lỗi trên file của bác HLMT.....nhân tiện đây em cũng cám ơn các bác đã chiếu cố tới chủ đề của em.... em cám ơn rất nhiều các bác thanhlanh, bác ndu96081631 và bác Hai Lúa Miền Tây.
 
Upvote 0
em chỉ set lại cho từng phiên bản chạy thui ^^!..... không biết là do đâu nhỉ? em không nghĩ là xung đột phiên bản đâu, vì em chạy nó cũng bình thường chỉ tới khi phát hiện ra lỗi trên file của bác HLMT.
Cái vụ lỗi này người ta đã bàn nhiều lần trên diễn đàn rồi và vẫn không tìm ra được giải pháp triệt để. Vậy nên sau đó người ta dần từ bỏ Listview, quay lại xài ListBox cho chắc ăn
Thật ra thì tôi chưa từng khoái thằng Listview, ít nhất là việc nó không hổ trợ Unicode đã.. thấy ghét rồi (đẹp đến đâu cũng mặc kệ)
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom