From sealand:
Mình chưa thấy tài liệu nào nói tới giới hạn cả. Mình nhớ không nhầm thì trong ví dụ mình đã gửi bạn cũng đã có 2 listview trên 1 form rồi
From ThyYeu99:
Hình như trong ví dụ không có anh ạh (Nếu em nhớ sai có gì anh gởi lại giúp em). ý của em là em muốn một lúc 2 listview thể hiện ở 2 mảng khác nhau
ví dụ em gởi kèm
Bạn nói rõ hơn chút, nghĩa là load dữ liệu của hai sheet ---> 1 listview, hay là load dữ liệu ở sheet1 ---> listview1 và sheet2 ---> listview2 ??........ý của em là em muốn một lúc 2 listview thể hiện ở 2 mảng khác nhau
ví dụ em gởi kèm
anh hướng dẫn lại giùm em trên 1 form mà LV load được ở 2 bảng ở sheet1 và sheet 2
From ThuyYeu99:
dạ laod dữ liệu sheet1 ---> listview1 và sheet2 ---> listview2
Nếu vậy thì 10 sheet cho 10 list cũng đâu có sao! bạn xem file đính kèm! Ấn Ctrl+Shift+L để thấy kết quả.dạ laod dữ liệu sheet1 ---> listview1 và sheet2 ---> listview2
Nếu vậy thì 10 sheet cho 10 list cũng đâu có sao! bạn xem file đính kèm! Ấn Ctrl+Shift+L để thấy kết quả.
Ok! Listview có nhiều loại listview, bạn đang sử dụng Listview nào? Hoặc bạn tạo sẵn cái form kèm theo hai cái listview của bạn rồi gửi lên đây xem thử nhé!Có thể em nói không rõ ràng nên anh hiểu nhầm ý em Cái anh dùng là LB còn em nói là LV (Còn cấu trúc của file ví dụ thì nó sao các anh để nguyên đừng sữa)
Bạn chép đoạn code này vào Form:dạ đây là ví dụ nhờ anh xem giúp
cho em hỏi sự kiện UserForm_Activate và UserForm_Initialize là sao ạh
Bạn chép đoạn code này vào Form:
Lưu ý: Nhớ Set lại thuộc tính View cho các Listview là 3-lvwReport
[highlight=vb]
Private Sub UserForm_Activate()
Dim mDetail As ListItem
Me.ListView1.ColumnHeaders.Clear: Me.ListView1.ListItems.Clear
Me.ListView2.ColumnHeaders.Clear: Me.ListView2.ListItems.Clear
'--------------------------------------------------
'Đưa dữ liệu từ sheet1 vào Listview1:
'Gán ColumnHeader cho Listview1:
For i = 1 To 6
Me.ListView1.ColumnHeaders.Add , , Sheet1.Cells(5, i)
Next i
'Import dữ liệu detail vào Listview1:
For i = 1 To Sheet1.[A65536].End(xlUp).Row - 5
Set mDetail = Me.ListView1.ListItems.Add(, , Sheet1.Cells(i + 5, 1))
For j = 1 To 5
mDetail.SubItems(j) = Sheet1.Cells(i + 5, j + 1)
Next j
Next i
'//---------------------------------------------------------------------//
'Đưa dữ liệu từ sheet2 vào Listview2:
'Gán ColumnHeader cho Listview1:
For i = 1 To 4
Me.ListView2.ColumnHeaders.Add , , Sheet2.Cells(6, i)
Next i
'Import dữ liệu detail vào Listview2:
For i = 1 To Sheet2.[A65536].End(xlUp).Row - 6
Set mDetail = Me.ListView2.ListItems.Add(, , Sheet2.Cells(i + 6, 1))
For j = 1 To 3
mDetail.SubItems(j) = Sheet2.Cells(i + 6, j + 1)
Next j
Next i
'=====================================================================
'Format Listviews nếu thấy cần thiết:
With ListView1
.ColumnHeaders(1).Alignment = lvwColumnLeft
.ColumnHeaders(2).Alignment = lvwColumnLeft
.ColumnHeaders(3).Alignment = lvwColumnRight
.ColumnHeaders(4).Alignment = lvwColumnRight
.ColumnHeaders(5).Alignment = lvwColumnRight
.ColumnHeaders(6).Alignment = lvwColumnRight
End With
With ListView2
.ColumnHeaders(1).Alignment = lvwColumnLeft
.ColumnHeaders(2).Alignment = lvwColumnLeft
.ColumnHeaders(3).Alignment = lvwColumnRight
.ColumnHeaders(4).Alignment = lvwColumnRight
End With
End Sub
[/highlight]
Bạn xem thêm fild đính kèm. Ấn Ctrl+Shift+L để xem kết quả.
Bạn vào Properties của từng Listview và Set thuộc tính Hide ColumnHeader là TRUE là xong thôi. Còn nếu muốn dùng Code thì thêm vào đầu đoạn code bên dưới như sau:Em muốn bỏ ColumnHeaders thì bỏ làm sao anh (em chỉ muốn nó load dữ liệu thôi) mò hoài chẳng ra
Private Sub UserForm_Activate()
Dim mDetail As ListItem
Me.ListView1.ColumnHeaders.Clear: Me.ListView1.ListItems.Clear
Me.ListView2.ColumnHeaders.Clear: Me.ListView2.ListItems.Clear
'Thêm vào hai đoạn này:
Me.ListView1.HideColumnHeaders = True
Me.ListView2.HideColumnHeaders = True
'--------------------------------------------------
............................
............................
............................
End Sub
thí dụ em chỉ muốn lấy đúng 3 cột trong sheet thu 2 của ví dụ em gởi kèm thì làm sao anh.
................................
Me.ListView2.ColumnHeaders.Add , , Sheet2.Cells(6, i)
................................
..........................
mDetail.SubItems(j) = Sheet2.Cells(i + 6, j + 1)
.............................
[Worksheet].Cells(Row, Column)
Em làm theo cách anh hướng dẫn thì đúng với yêu cầu em đặt ra rồi.Thật ra trong bảng dữ liệu em chỉ cần láy mấy cột thôi nhưng mà nó không có nằm liền với nhau, em có dùng .ColumnHeaders(5).Width=0 để ẩn trên LV các cột không cần thiết nhưng thấy nó sao sao đó. (Tự em không biết gì về VB nên không thể hiện được câu hỏi chính xác mong các anh thông cảm)
Cám ơn anh đã nhiệt tình hướng dẫn
ca_dafi tận dụng sự liên tục của các cột nên dùng For ... Next để rút ngắn code đấy các hạ à!
Trong trường hợp của các hạ, lấy các cột không liên tục và load vào Lisview như thế thì không dùng for ... next được.
Private Sub UserForm_Activate()
Dim mDetail As ListItem
Me.ListView1.ColumnHeaders.Clear: Me.ListView1.ListItems.Clear
Me.ListView2.ColumnHeaders.Clear: Me.ListView2.ListItems.Clear
'--------------------------------------------------
Me.ListView1.HideColumnHeaders = True
Me.ListView2.HideColumnHeaders = True
'Load sheet1 to Listview1:
'Listview1 có 4 cot STT, Tên, DVi, TIEN,
'Gán ColumnHeader tung ung voi 4 cot cua sheet1, cot 1,2,3,6 trong sheet1:
'Vẫn dùng For ... Next để giải quyết được:
For i = 1 To 4
Me.ListView1.ColumnHeaders.Add , , Sheet1.Cells(5, IIf(i < 4, i, i + 2))
Next i
'--------------------------------------------------
For i = 1 To Sheet1.[A65536].End(xlUp).Row - 5
Set mDetail = Me.ListView1.ListItems.Add(, , Sheet1.Cells(i + 5, 1))
'Vẫn dùng For ... Next để giả quyết được:
For J = 1 To 3
mDetail.SubItems(J) = Sheet1.Cells(i + 5, IIf(J < 3, J, J + 2))
Next J
Next i
'--------------------------------------------------
...........................
...........................
End Sub
Em làm theo cách anh hướng dẫn thì đúng với yêu cầu em đặt ra rồi.Thật ra trong bảng dữ liệu em chỉ cần láy mấy cột thôi nhưng mà nó không có nằm liền với nhau, em có dùng .ColumnHeaders(5).Width=0 để ẩn trên LV các cột không cần thiết nhưng thấy nó sao sao đó. (Tự em không biết gì về VB nên không thể hiện được câu hỏi chính xác mong các anh thông cảm)
Sub TaoLVGPE(LVAll As ListView, Mang As Range, _
Optional Cot1 As Long, Optional Cot2 As Long, _
Optional Cot3 As Long, Optional Cot4 As Long, _
Optional Cot5 As Long, Optional Cot6 As Long, _
Optional Cot7 As Long, Optional Cot8 As Long)
' Sub nay dung de dua mot MANG vao mot LISTVIEW'
On Error Resume Next
Dim iC As Byte, ir As Integer, SoCot As Long, i As Byte
SoCot = (Cot1 > 0) * 1 + (Cot2 > 0) * 1 + (Cot3 > 0) * 1 + (Cot4 > 0) * 1 + (Cot5 > 0) * 1 + (Cot6 > 0) * 1 + (Cot7 > 0) * 1 + (Cot8 > 0) * 1
SoCot = SoCot * (-1)
iC = Mang.Columns.Count
If LVAll.ColumnHeaders.Count < SoCot Then Exit Sub
LVAll.ListItems.Clear
LVAll.Sorted = False
For ir = 1 To Mang.Rows.Count ' Xet tung Hang'
If Mang(ir, 1) = "" Then GoTo Tiep
For i = 1 To SoCot ' Xet tung cot'
iC = Choose(i, Cot1, Cot2, Cot3, Cot4, Cot5, Cot6, Cot7)
If i = 1 Then
LVAll.ListItems.Add.Text = Mang(ir, iC).Text ' Cot Dau Tien'
ElseIf i > 1 Then
LVAll.ListItems.Item(ir).SubItems(i - 1) = Mang(ir, iC) ' Hang iR, Cot thu IC'
End If
'Stop'
Next
Tiep:
Next
'LVAll.Sorted = True'
' Tao Mau cho cac hang'
' TaoColorLV LVAll'
End Sub
Call TaoLVGPE(Me.H_LVDK, Sheet1.Range("A2:D11"), 2, 4)
Me.ListView1.ColumnHeaders.Add , , Sheet1.Cells(5, IIf(i < 4, i, i + 2))
[/highlight]
Anh giải thích giùm em câu này được không Ạh:
Me.ListView1.ColumnHeaders.Add , , Sheet1.Cells(5, IIf(i < 4, i, i + 2))
..............., Sheet1.Cells(5, IIf(i < 4, i, i + 2))