Thiết lập tiêu đề cho Listbox bằng VBA ? (2 người xem)

Liên hệ QC

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

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Mình loay hoay mãi mà không được nên đưa lên đây mọi người hỗ trợ:

Giả sử trên Form có Listbox1. Listbox1 có 2 cột là MaVT và TenVT.

Các lệnh thiết lập listbox như sau:
1/ Lệnh AddItems và List để tạo các dòng trên Listbox1
2/Lệnh cho hiện tiêu đề cột của Listbox là: Listbox1.ColumnHeads=True

Giờ để Listbox có dòng tiêu đề cột 1 là Mã VT và tiêu đề cột 2 là Tên VT ta làm thế nào ?
 
Mình loay hoay mãi mà không được nên đưa lên đây mọi người hỗ trợ:

Giả sử trên Form có Listbox1. Listbox1 có 2 cột là MaVT và TenVT.

Các lệnh thiết lập listbox như sau:
1/ Lệnh AddItems và List để tạo các dòng trên Listbox1
2/Lệnh cho hiện tiêu đề cột của Listbox là: Listbox1.ColumnHeads=True

Giờ để Listbox có dòng tiêu đề cột 1 là Mã VT và tiêu đề cột 2 là Tên VT ta làm thế nào ?

Em đã nhiều lần thí nghiệm thì không thành, nhưng em làm như sau:

Giả sử A1:B1 là hàng tiêu đề

Từ A2:B10 là các giá trị

Chỉ có chọn thuộc tính ROWSOURCE mới có thể có tiêu đề hiện lên thôi.

Với RowSource = A2:B10

Thuộc tính ColumnHead = True (tự động nó hiểu A1:B1 là tiêu đề)
 
Upvote 0
Làm như vậy cũng bất tiện, trên data sheet ta thường đặt tên cột có tính gợi ý và thật gọn. Việc này ảnh hưởng rất lớn như câu lệnh SQL chẳng hạn. Mình muốn khi tạo Form mình có thể tuỳ ngữ cảnh cơ. Ví dụ : Trên form cho phiếu xuất là Mã hàng xuất còn khi nhập lại là Mã hàng nhập
 
Upvote 0
Làm như vậy cũng bất tiện, trên data sheet ta thường đặt tên cột có tính gợi ý và thật gọn. Việc này ảnh hưởng rất lớn như câu lệnh SQL chẳng hạn. Mình muốn khi tạo Form mình có thể tuỳ ngữ cảnh cơ. Ví dụ : Trên form cho phiếu xuất là Mã hàng xuất còn khi nhập lại là Mã hàng nhập

Đành phải chịu thôi chứ thuộc tính của nó là như vậy rồi! Thôi thì Anh làm trên ListView sẽ tốt hơn ạ (chỉ khó chịu là convert chữ Việt).

Em không thích ListBox ở chỗ tự điều chỉnh độ cao của nó, lúc lên lúc xuống; còn chọn thuộc tính ListBox1.IntegralHeight = False thì khi mình dùng Scroll sẽ không hết hàng, rất khó chịu chỗ đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là 1 cách mình đã lợi dụng cách dùng Rowsource, nhưng không hiểu tại sao nó lại cố tình không hiểu mà lại thiết lập tiêu đề thành Column 1

[GPECODE=vb]Private Sub Reset_MaTK()
Dim Sh As Worksheet
Me.ListBox1.ColumnHeads = True
Application.DisplayAlerts = False
Set Sh = ThisWorkbook.Worksheets.Add
Sh.[A1] = "Ma TK"
Sheet1.[E2:E10].Copy Sh.[A2]
Me.ListBox1.RowSource = Sh.Name & "!A1:A10"
Sh.Delete
Application.DisplayAlerts = True
End Sub[/GPECODE]

Không hiểu sao với code này mình chỉ thêm tạm 1 sheet chép dữ liệu vào làm rowsource cho Listbox xong rồi xoá đi mà máy báo thiếu bộ nhớ ?
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là 1 cách mình đã lợi dụng cách dùng Rowsource, nhưng không hiểu tại sao nó lại cố tình không hiểu mà lại thiết lập tiêu đề thành Column 1

[GPECODE=vb]Private Sub Reset_MaTK()
Dim Sh As Worksheet
Me.ListBox1.ColumnHeads = True
Application.DisplayAlerts = False
Set Sh = ThisWorkbook.Worksheets.Add
Sh.[A1] = "Ma TK"
Sheet1.[E2:E10].Copy Sh.[A2]
Me.ListBox1.RowSource = Sh.Name & "!A1:A10"
Sh.Delete
Application.DisplayAlerts = True
End Sub[/GPECODE]

Không hiểu sao với code này mình chỉ thêm tạm 1 sheet chép dữ liệu vào làm rowsource cho Listbox xong rồi xoá đi mà máy báo thiếu bộ nhớ ?

Chổ này:
Me.ListBox1.RowSource = Sh.Name & "!A1:A10"
Anh sửa thành:
Me.ListBox1.RowSource = Sh.Name & "!A2:A10"
nhé
 
Upvote 0
Chổ này:
Me.ListBox1.RowSource = Sh.Name & "!A1:A10"
Anh sửa thành:
Me.ListBox1.RowSource = Sh.Name & "!A2:A10"
nhé

Không phải Ndu ơi, A1 là mình đặt tiêu đề còn từ A2 dến A10 là các dòng của Listbox, hay là nó tự nhạn tiêu đề nhỉ để mình test lại đã

P/S:
Ồ, lẩm cẩm thật. Được rồi Ndu ơi, nhưng còn vấn đề tổn bộ nhớ là sao nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
Chổ này:
Me.ListBox1.RowSource = Sh.Name & "!A1:A10"
Anh sửa thành:
Me.ListBox1.RowSource = Sh.Name & "!A2:A10"
nhé

Thì đó, như em đã nói tại bài này:

Em đã nhiều lần thí nghiệm thì không thành, nhưng em làm như sau:

Giả sử A1:B1 là hàng tiêu đề

Từ A2:B10 là các giá trị

Chỉ có chọn thuộc tính ROWSOURCE mới có thể có tiêu đề hiện lên thôi.

Với RowSource = A2:B10

Thuộc tính ColumnHead = True (tự động nó hiểu A1:B1 là tiêu đề)

Có thể Anh Sealand muốn tạo một chương trình gì đó mới mẽ bằng ListBox đây!

Còn em thì em thích với ListView, nó thật đa dạng!
 
Lần chỉnh sửa cuối:
Upvote 0
Không phải Ndu ơi, A1 là mình đặt tiêu đề còn từ A2 dến A10 là các dòng của Listbox, hay là nó tự nhạn tiêu đề nhỉ để mình test lại đã

P/S:
Ồ, lẩm cẩm thật. Được rồi Ndu ơi, nhưng còn vấn đề tổn bộ nhớ là sao nhỉ.

Sao em test thử lại không báo thiếu bộ nhớ vậy anh?

----------------------------------------------------------------
Phần thêm:

Em kiểm tra rồi, khi bấm nút lần 2 sẽ thông báo bộ nhớ không đủ.

Cách khắc phục như sau:

Mã:
Private Sub Reset_MaTK()
    Dim Sh As Worksheet
    Me.ListBox1.ColumnHeads = True
    Application.DisplayAlerts = False
    Set Sh = ThisWorkbook.Worksheets.Add
    Sh.[A1] = "Ma TK"
    Sheet1.[E2:E10].Copy Sh.[A2]
    Me.ListBox1.RowSource = Sh.Name & "!A2:A10"
    Sh.Delete
    [COLOR=#ff0000][B]Set Sh = Nothing[/B][/COLOR]
    Application.DisplayAlerts = True
End Sub

Thêm dòng màu đỏ sẽ hết bị tình trạng đó.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sao em test thử lại không báo thiếu bộ nhớ vậy anh?

----------------------------------------------------------------
Phần thêm:

Em kiểm tra rồi, khi bấm nút lần 2 sẽ thông báo bộ nhớ không đủ.

Cách khắc phục như sau:

Mã:
Private Sub Reset_MaTK()
    Dim Sh As Worksheet
    Me.ListBox1.ColumnHeads = True
    Application.DisplayAlerts = False
    Set Sh = ThisWorkbook.Worksheets.Add
    Sh.[A1] = "Ma TK"
    Sheet1.[E2:E10].Copy Sh.[A2]
    Me.ListBox1.RowSource = Sh.Name & "!A2:A10"
    Sh.Delete
    [COLOR=#ff0000][B]Set Sh = Nothing[/B][/COLOR]
    Application.DisplayAlerts = True
End Sub

Thêm dòng màu đỏ sẽ hết bị tình trạng đó.
Trên máy tôi, bấm đúng 100 lần cũng chẳng có thông báo gì cả
Chắc tại BỘ NHỚ của Nghĩa và anh sealand bị.. LÃO HÓA rồi cũng không chừng
Ẹc... Ẹc...
 
Upvote 0
Upvote 0
Hi em,
Đúng là cũng hay, nhưng nếu em phát triển ứng dụng, một khi có nâng cấp gì bộ office là coi như... em ngồi khóc luôn.
Chính vì vậy sau này anh không dùng ListView đó nữa.

Lê Văn Duyệt

Xin được các bạn giải thích cụ thể hạn chế của ListView khi nâng cấp office? Mình thích dùng ListView vì sử dụng được chuột phải khi danh sách dài
 
Upvote 0
Trên máy tôi, bấm đúng 100 lần cũng chẳng có thông báo gì cả
Chắc tại BỘ NHỚ của Nghĩa và anh sealand bị.. LÃO HÓA rồi cũng không chừng
Ẹc... Ẹc...

Em thử trên Excel 2003 và chắc máy của anh Sealand cũng vậy nên mới có trường hợp bị lỗi trên!

Vậy mới biết được rằng phải thử code trên nhiều phiên bản để khắc phục lỗi từ những phiên bản trước.

Đồng thời, giải phóng bộ nhớ cũng rất quan trọng!

Hi em,
Đúng là cũng hay, nhưng nếu em phát triển ứng dụng, một khi có nâng cấp gì bộ office là coi như... em ngồi khóc luôn.
Chính vì vậy sau này anh không dùng ListView đó nữa.

Lê Văn Duyệt

Em cũng muốn biết nó bị lỗi gì sau khi nâng cấp, em đã xài ListView trên 2003 và 2007 vẫn ổn định. Anh cho em biết bị lỗi gì anh nhé. Cám ơn Anh.
 
Upvote 0
Em thử trên Excel 2003 và chắc máy của anh Sealand cũng vậy nên mới có trường hợp bị lỗi trên!

Vậy mới biết được rằng phải thử code trên nhiều phiên bản để khắc phục lỗi từ những phiên bản trước.

Đồng thời, giải phóng bộ nhớ cũng rất quan trọng!



Em cũng muốn biết nó bị lỗi gì sau khi nâng cấp, em đã xài ListView trên 2003 và 2007 vẫn ổn định. Anh cho em biết bị lỗi gì anh nhé. Cám ơn Anh.

Đại khái ý là nếu dùng ListView từ 2003 lên 2007 thì nó vẫn xài được anh. Nhưng mà file đã chạy từ máy 2007 (dù là file xls) nhưng khi chuyển qua máy 2003 thì máy đó sẽ không xài được ListView.
 
Upvote 0
Đại khái ý là nếu dùng ListView từ 2003 lên 2007 thì nó vẫn xài được anh. Nhưng mà file đã chạy từ máy 2007 (dù là file xls) nhưng khi chuyển qua máy 2003 thì máy đó sẽ không xài được ListView.

Kỳ vậy ta? Anh thường thiết kế trên máy 2007 khi save lại ở dạng 97-2003, rồi thực hiện trên cả 2 loại 2003-2007 vẫn không có một dấu hiệu nào khác thường.

Anh sử dụng ListView trong thư viện Microsoft Windows Common Controls 6.0 (SP6).
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    53.9 KB · Đọc: 275
Upvote 0
Kỳ vậy ta? Anh thường thiết kế trên máy 2007 khi save lại ở dạng 97-2003, rồi thực hiện trên cả 2 loại 2003-2007 vẫn không có một dấu hiệu nào khác thường.

Anh sử dụng ListView trong thư viện Microsoft Windows Common Controls 6.0 (SP6).
Không phải đâu anh, tức là anh thiết kế file trên máy có Office 2003 và Office 2007 (hoặc 07 thôi) rồi anh save ở định dạng xls thì anh mở file đó trên máy anh, dù là 03 hay 07 đều không sao. Tuy nhiên, nếu anh đem file đó qua máy chỉ cài Office 03 thôi, thì nó sẽ không chạy được ListView.
 
Upvote 0
Em thử trên Excel 2003 và chắc máy của anh Sealand cũng vậy nên mới có trường hợp bị lỗi trên!

Vậy mới biết được rằng phải thử code trên nhiều phiên bản để khắc phục lỗi từ những phiên bản trước.

Đồng thời, giải phóng bộ nhớ cũng rất quan trọng!
.

Nghĩa thử lại code này xem còn lỗi không
Mã:
Private Sub Reset_MaTK()
  Me.ListBox1.ColumnHeads = True
  Application.DisplayAlerts = False
  With ThisWorkbook.Worksheets.Add
    .Range("A1") = "Ma TK"
    Sheet1.Range("E2:E10").Copy .Range("A2")
    Me.ListBox1.RowSource = .Name & "!A2:A10"
    .Delete
  End With
  Application.DisplayAlerts = True
End Sub
Tôi cũng không chắc nhưng cứ thí nghiệm xem thế nào
 
Upvote 0
Vẫn lỗi Ndu à, khi load lên thì khôn sao nhưng khi chọn 1 item nào đó là sinh chuyện
 
Upvote 0
Không phải đâu anh, tức là anh thiết kế file trên máy có Office 2003 và Office 2007 (hoặc 07 thôi) rồi anh save ở định dạng xls thì anh mở file đó trên máy anh, dù là 03 hay 07 đều không sao. Tuy nhiên, nếu anh đem file đó qua máy chỉ cài Office 03 thôi, thì nó sẽ không chạy được ListView.

Không biết các máy khác như thế nào, máy anh thiết kế chỉ dùng 1 office 2007 và save as thành 2003, đem file này qua máy chỉ có 2003 vẫn xài listview được, không những thế, anh đã thử trên nhiều máy 2003 ở cơ quan qua mạng nội bộ, máy 2003 nào cũng xài không bị lỗi gì!
 
Upvote 0
Web KT

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

Back
Top Bottom