Thường, có lẽ bạn vẫn hay thấy Combobox chứa danh sách có 1 cột duy nhất. Nhưng, bạn có biết là có thể tạo Combobox với nhiều hơn 1 cột khi sử dụng trong UserForm VBA Excel hay không?
Combobox nhiều cột sẽ giúp bạn thể hiện nội dung danh sách các lựa chọn được cụ thể chi tiết hơn rất nhiều. Vì thế ở bài này, mình sẽ chia sẻ với bạn cách đơn giản nhất để tạo Combobox có nhiều cột trong UserForm VBA Excel.
Tạo Combobox nhiều cột trong UserForm VBA
Trước khi bắt đầu, nếu bạn chưa biết cách tạo và sử dụng Userform trong VBA Excel, bạn hãy tham khảo bài viết Cách sử dụng UserForm trong VBA trước đã nha.
Ở đây, ví dụ tạo Combobox nhiều cột, mình sẽ tạo 1 UserForm. Trong đó bao gồm: 1 Combobox và 3 Textbox.
Tiếp theo, chúng ta sẽ tiến hành khởi tạo danh sách nhiều cột cho Combobox.
Bạn hãy tạo hàm UserForm_Initialize() và tham khảo cách khởi tạo dữ liệu cho Combobox nhiều cột như sau:
Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 3
Dim fruits(1 To 5, 1 To 3) As String
Dim i As Integer, j As Integer
fruits(1, 1) = "Avocado : Bo"
fruits(1, 2) = "KG"
fruits(1, 3) = 30000
fruits(2, 1) = "Mango : Xoai"
fruits(2, 2) = "KG"
fruits(2, 3) = 25000
fruits(3, 1) = "Kumquat : Quat"
fruits(3, 2) = "KG"
fruits(3, 3) = 10000
fruits(4, 1) = "Apricot : Mo"
fruits(4, 2) = "KG"
fruits(4, 3) = 50000
fruits(5, 1) = "Rambutan : Chom Chom"
fruits(5, 2) = "KG"
fruits(5, 3) = 25000
ComboBox1.List = fruits
End Sub
Code language: VB.NET (vbnet)
Trong hàm trên, bạn hãy xem xét các lệnh sau:
- ComboBox1.ColumnCount = 3 : khai báo Combobox có 3 cột.
- Dim fruits(1 To 5, 1 To 3) As String: khai bảo mảng 2 chiều 5 x 3. Tương ứng với 5 hàng, 3 cột.
- ComboBox1.List = fruits: gán mảng vào Combobox.
Hoàn thành hàm như trên, bây giờ bạn có thể thử chạy UserForm để xem kết quả.
Đọc giá trị các cột được chọn trong Combobox
Tạo được Combobox với 3 cột. Tiếp theo, làm sao để lấy giá trị các cột theo hàng được chọn?
Bạn thấy trong hàm khởi tạo mảng cho Combobox, mỗi hàng có 3 cột được thêm vào.
Như vậy, khi lấy giá trị từ Combobox theo hàng được chọn. Bạn chỉ cần lấy theo Column(0) tương ứng với cột 1, Column(1) tương ứng với cột 2 của mảng…
Và, bạn có thể bắt sự kiện Change của Combobox để ghi giá trị của hàng ra các Textbox như sau.
Private Sub ComboBox1_Change()
On Error Resume Next
TextBox1.Text = ComboBox1.Column(0)
TextBox2.Text = ComboBox1.Column(1)
TextBox3.Text = ComboBox1.Column(2)
End Sub
Code language: VB.NET (vbnet)
Hoàn thành hàm trên, bạn hãy chạy UserForm. Khi lựa chọn 1 hàng trong Combobox, thì các giá trị tương ứng với cột cũng sẽ được ghi ra Textbox.
Kết luận
Cách trên là cách đơn giản để bạn tạo được 1 Combobx nhiều cột trong UserForm VBA Excel. Bạn có thể tùy biến nâng cao hơn bằng cách đọc và gán vào Combobox từ bảng đã xác định trong bảng tính Excel.
Chúc bạn vui!
Mình muốn mảng add vào cobobox là vùng dữ liệu trong sheet có số hàng là lastrow thì làm thế nào?