Có thể thêm cột cho ListBox được không?

Liên hệ QC

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Trong ListBox tôi cần nó 13 cột nhưng bị lổi, chỉ được có 10, vậy có thể bằng cách nào để thêm cột cho nó được không các bạn ?
 
Trong ListBox tôi cần nó 13 cột nhưng bị lổi, chỉ được có 10, vậy có thể bằng cách nào để thêm cột cho nó được không các bạn ?
Listbox chỉ cho phép có tối đa là 10 cột thôi bạn ạ, nếu muốn sử dụng nhiều hơn thì bạn thử nghiên cứu Listview nhé, tìm trên diễn đàn có khá nhiều bài về Listview đấy.
 
Upvote 0
Cám ơn bạn! - nhưng Listview thì tôi cũng không thấy ColumnWidths để thêm và điều chỉnh độ rộng cột. Các bạn biết thì hướng dẩn dùm. Cám ơn
 
Upvote 0
Không hoàn toàn như vậy, nếu nạp nguồn cho ListBox bằng phương pháp hợp lý vẫn được. Xem file ví dụ có 24 cột
Điều chỉnh cột , tiêu đề Listview có thể dùng Code hay Design. Mới làm nên chọn Listview--Properties--Custom--Thẻ Column
 

File đính kèm

Upvote 0
Chào anh sealand !
Em tìm cách sửa theo file của anh mà không được, em nạp ListBox theo cách dưới đây dùng để sửa DL, anh xem có cách nào chèn sửa dùm.

Mã:
Sub napdl()
Dim dk As String, i, j, s1
If Me.ListBox1.ListCount > 0 Then Me.ListBox1.Clear
For i = 0 To Sheet11.[b65536].End(xlUp).Row - 2
If Trim(Sheet11.Cells(i + 2, "b")) = Trim(Me.ComboBox2) Then
Me.ListBox1.AddItem Sheet11.Cells(i + 2, "h"), j
Me.ListBox1.List(j, 1) = Sheet11.Cells(i + 2, "i")
Me.ListBox1.List(j, 2) = Sheet11.Cells(i + 2, "j")
 
Upvote 0
Hi, nạp theo phương thức Add là bị dính chưởng rồi. Tìm cách khác
Mà bạn đưa luôn cái file đó lên đây cho tiện sửa. Cái việc của bạn hoàn toàn khả dĩ
 
Lần chỉnh sửa cuối:
Upvote 0
Hi, nạp theo phương thức Add là bị dính chưởng rồi. Tìm cách khác
Mà bạn đưa luôn cái file đó lên đây cho tiện sửa. Cái việc của bạn hoàn toàn khả dĩ

Đây cũng là một File VD mà anh đưa em, em "sanh sửa" chút đỉnh công thức đó cho phù hợp việc em dùng, nhưng ListBox nó không cho mình quá 10 cột.
Anh xem dùm nha!
 

File đính kèm

Upvote 0
Bạn xem trong file nha. Minh load dữ liệu vào mảng sau đó load lên bằng phương thức List
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh sealand nhiều, để em nghiên cứu vào việc.
Thân mến
 
Upvote 0
Anh sealand xem lại dùm em chút, code của anh càng đơn giản thì với không biết như em càng phức tạp, lần mò hoài không áp dụng được. Trong file gởi kèm em có nêu khúc mắc. Cảm phiền anh nha.
 

File đính kèm

Upvote 0
Khi đã có giải pháp thì cũng dễ và gọn gàng thôi
Ta đặt tên 13 TextBox là Tx01, Tx02....Tx13 và thêm đoạn code

Mã:
Private Sub ListBox2_Click()
Dim i
For i = 1 To 13
Me.Controls("Tx" & Right("00" & i, 2)) = Me.ListBox2.Column(i - 1)
Next
End Sub

Xem vi dụ
 

File đính kèm

Upvote 0
Khi đã có giải pháp thì cũng dễ và gọn gàng thôi
Ta đặt tên 13 TextBox là Tx01, Tx02....Tx13 và thêm đoạn code

Mã:
Private Sub ListBox2_Click()
Dim i
For i = 1 To 13
Me.Controls("Tx" & Right("00" & i, 2)) = Me.ListBox2.Column(i - 1)
Next
End Sub

Xem vi dụ
Trong ComboBox em dùng List name như anh thấy, còn vùng nguồn thì từ cột mã tới cột hàng cách nhau 5 cột đệm khác.
Em copy code của anh vào thử thì nó cho kết quả như hình phía trên, em thay đổi dòng
"If Trim(Cl.Value) = Trim(Me.ComboBox2) Then
For j = 0 To 12" thành "For j = 5 To 12" thì nó ra kết quả như hình phía dưới, tức là nó bỏ trắng 5 cột đầu trong ListBox nhưng em nhìn vào công thức chỉnh không được...
 

File đính kèm

  • A.jpg
    A.jpg
    19 KB · Đọc: 45
Upvote 0
Bạn chú ý đoạn CXode sau:

Sub napdl()
........................................

For Each Cl In Range(Sheet1.[G2], Sheet1.[g65536].End(xlUp)) 'Xác đụnh cột đầu tiên là cột G, muốn điều chỉnh chú ý chữ đỏ

If Trim(Cl.Value) = Trim(Me.ComboBox1) Then

For j = 0 To 12 'Day là số cột-1 vì tính từ 0

Mg(i, j) = IIf(IsNumeric(Cl.Offset(, j + 1)), Format(Cl.Offset(, j + 1), "#,##0"), Cl.Offset(, j + 1)) 'Cột thứ J+1 cách cột đầu

Next

i = i + 1

s1 = s1 + Val(Cl.Offset(, 5))

End If

Next
......................................................
End Sub

Nôm na như vậy hy vọng đễ hiểu hơn

Bạn nói dùng ListName là như thế nào mình không rõ, nhưng nếu dùng Rowsource thì cũng được và cũng khá nhanh nhưng với yêu cầu dữ liệu phải được sắp xếp theo cột tiêu chuẩn. Đây là cách nạp dùng Rowsource

Mã:
Sub napdl()
Dim dk As String, i, j, s1
Dim Mg(), Cl As Range
Me.TextBox1 = 0: Me.TextBox2 = 0: Me.TextBox3 = 0
Me.ListBox2.RowSource = ""
j = WorksheetFunction.CountIf(Range(Sheet1.[G2], _
Sheet1.[g65536].End(xlUp)), Trim(Me.ComboBox1))
If j = 0 Then Exit Sub
Set Cl = Sheet1.Columns("G").Find(what:=Trim(Me.ComboBox1))
Me.ListBox2.RowSource = "Sheet1!" & Cl.Offset(, 1).Resize(j, 13).Address
s1 = WorksheetFunction.Sum(Cl.Offset(, 5).Resize(j))
Me.TextBox1 = Format(s1, "#,##0")
Me.TextBox2 = Format(Int(s1 * 0.1), "#,##0")
Me.TextBox3 = Format(Int(s1 * 1.1), "#,##0")
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn chú ý đoạn CXode sau:

Sub napdl()
........................................

For Each Cl In Range(Sheet1.[G2], Sheet1.[g65536].End(xlUp)) 'Xác đụnh cột đầu tiên là cột G, muốn điều chỉnh chú ý chữ đỏ

If Trim(Cl.Value) = Trim(Me.ComboBox1) Then

For j = 0 To 12 'Day là số cột-1 vì tính từ 0

Mg(i, j) = IIf(IsNumeric(Cl.Offset(, j + 1)), Format(Cl.Offset(, j + 1), "#,##0"), Cl.Offset(, j + 1)) 'Cột thứ J+1 cách cột đầu

Next

i = i + 1

s1 = s1 + Val(Cl.Offset(, 5))

End If

Next
......................................................
End Sub

Nôm na như vậy hy vọng đễ hiểu hơn

Bạn nói dùng ListName là như thế nào mình không rõ, nhưng nếu dùng Rowsource thì cũng được và cũng khá nhanh nhưng với yêu cầu dữ liệu phải được sắp xếp theo cột tiêu chuẩn. Đây là cách nạp dùng Rowsource

Mã:
Sub napdl()
Dim dk As String, i, j, s1
Dim Mg(), Cl As Range
Me.TextBox1 = 0: Me.TextBox2 = 0: Me.TextBox3 = 0
Me.ListBox2.RowSource = ""
j = WorksheetFunction.CountIf(Range(Sheet1.[G2], _
Sheet1.[g65536].End(xlUp)), Trim(Me.ComboBox1))
If j = 0 Then Exit Sub
Set Cl = Sheet1.Columns("G").Find(what:=Trim(Me.ComboBox1))
Me.ListBox2.RowSource = "Sheet1!" & Cl.Offset(, 1).Resize(j, 13).Address
s1 = WorksheetFunction.Sum(Cl.Offset(, 5).Resize(j))
Me.TextBox1 = Format(s1, "#,##0")
Me.TextBox2 = Format(Int(s1 * 0.1), "#,##0")
Me.TextBox3 = Format(Int(s1 * 1.1), "#,##0")
End Sub
Anh sealand !
Bài trên của anh em làm được rồi, còn bài dưới làm hoài cũng còn cột trống giửa, anh xem file dùm em.
 

File đính kèm

Upvote 0
Bạn sửa 2 dòng sau ăn liền
1/
Mã:
Sub napdl()
'............................
Me.ListBox2.RowSource = "Sheet1!" & Cl.Offset(, 5).Resize(j, 17).Address
'............................
End Sub
2/
Mã:
Private Sub UserForm_Initialize()
Me.ListBox2.ColumnWidths = "80,30,50,40,70,60,60,60,60,60,60,60,60,60,60,60"
..................................
End Sub
i: Thừa (Do sao chép Code xoá không hết)
j: Số dòng của ListBox2
s1: Tổng tiền hàng của các mặt hàng trong ListBox2

Khi viết Code tốt nhất phải khai báo đủ biến để khi chạy file ở máy có khai báo Option Explicit sẽ không bị lỗi
 
Lần chỉnh sửa cuối:
Upvote 0
...Lại tìm anh nửa rồi!
Anh giúp cho trót, em không làm được trọ vẹn cái Form sửa DL.
Khi em sửa xong trong các TextBox từ TextBox1 đến TextBox12 trong đó có 1 ComboBox1, và bấm OK để nhập vào lại Sheet "DL So Ban" thì chỉ có ComboBox1 là hữu dụng, còn các TextBox thì bị lổi gì không biết, anh thông cảm xem file sửa dùm. Cám ơn anh.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hì, rất nhiều lần mình bị thế này: Mình không dùng Excel2007 nên không mở được file của bạn
 
Upvote 0
Xin lổi anh! bởi em để nguyên hiện trạng file vì không biết Save As sang 2003 khi mở có lổi gì không, em gởi lại file khác nhờ anh xem sửa dùm. Cám ơn anh nhiều, mất mấy ngày không làm được.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom