[UserForm]Combobox

Euler

Administrator
Thành viên BQT
1. Combobox để làm gì?
Bạn muốn một list danh sách sổ ra để bạn chọn, và chúng ta nghĩ tới Combobox.
Bạn cần đăng nhập để thấy hình ảnh

2. Tạo Combobox như thế nào?
Ấn ALT+F11 để mở trình soạn thảo VBA.
Tại đây bạn chọn Insert UserForm.
Bạn cần đăng nhập để thấy hình ảnh



Trên khay công cụ chọn Combobox và kéo vào UserForm
Bạn cần đăng nhập để thấy hình ảnh


Chèn Combobox ta được:
Bạn cần đăng nhập để thấy hình ảnh


3. Nhập dữ liệu cho Combobox
Double Click vào Userform chứa Combobox và viết thủ tục sau:
Mã:
Private Sub UserForm_Initialize()
    With Me.ComboBox1
        .AddItem "Text1"
        .AddItem "Text2"
        .AddItem "Text3"
    End With
End Sub
Bạn cần đăng nhập để thấy hình ảnh

4. Kiểm chứng một số thông số hay dùng.
Ta tạo nút bấm Test và chèn code sau:
Mã:
Private Sub CommandButton1_Click()
       MsgBox ComboBox1.ListIndex
End Sub
Cho UserForm hiện lên và chọn Combobox là Text 1, ấn Test ra kết quả là 0. Tương tự Text2 cho kết quả là 1, Text3 là 2.
Ngược lại, nếu ta có các kết quả là 0,1,2 thì làm thế nào để cho hiện ra Text1,Text2, Text3?
Chạy code sau:
Mã:
Sub thinghiem()
    MsgBox UserForm1.ComboBox1.List(0)
End Sub
Ta được kết quả là Text1, tương tự nếu thay tham số trên là 1,2 ta được Text2, Text3.
Làm thế nào để biết combobox của chúng ta có bao nhiêu phần tử?
Chạy code sau cho chúng ta kết quả là 3.
Mã:
Sub thinghiem2()
    MsgBox UserForm1.ComboBox1.ListCount
End Sub
Nguồn tham khảo:
Mã:
https://www.sejuku.net/blog/37777
 
Nếu các giá trị Add vào Combobox mà không có quy luật, chẳng hạn là những ký tự không liên quan gì tới nhau, khi đó ta có thể gán các ký tự này vào một string.
s = s1,s2,s3,s4,...
Rồi dùng để tách s thành các phần tử s1,s2,s3,... nạp vào mảng, dùng for~next để gán.
Ở đây mình giới thiệu thêm một cách khác, đó là dùng hàm .
Ví dụ dưới đây mình muốn gán tên các tháng vào Combobox1 :
Bạn cần đăng nhập để thấy hình ảnh

Code là:
Mã:
Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 12 Step 1
        ComboBox1.AddItem Choose(i, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
    Next i
End Sub
 

vbano1

SMod
Thành viên BQT
Nạp nhanh:
Mã:
ComboBox1.List = Array("een", "twee", "drie")
Hoặc:
Mã:
ComboBox1.List  = arr 'Mảng một chiều
 

Vũ Xuân Phát

Yêu THVBA
Xin cho mình hỏi vấn đề này. Mình có 1 UserForm để nhập liệu, Mình có tạo những combobox để nhập thông tin. Mình nạp dữ liệu vào Combobox trực tiếp từ sheet chứa dữ liệu nhập vào.
Ví dụ: mình có Combobox "Tên đường". Thì mình muốn nạp dữ liệu vào để lần sau nhập vào khi nhập lại cùng tên đường đó thì combobox dropdown gợi ý ra cho mình. Tuy nhiên, khi có 1 tên đường mới không có trong dữ liệu. Thì combobox không có nhập. Nhờ anh/chị hỗ trợ vấn đề này được ko ạ?
 

tuhocvba

Administrator
Thành viên BQT
Kết hợp combobox với listbox sẽ cho hiệu quả rất tốt. Trên diễn đàn có topic rồi, mình không có thời gian tìm, bạn chịu khó tìm.
 

tuhocvba

Administrator
Thành viên BQT
Tôi chưa tìm thấy tài liệu nào nói về số cột giới hạn trong listbox. Bạn cung cấp file demo xem sao . Đây cũng là cách làm việc chuyên nghiệp !
 
Với VB.NET cú pháp hơi khác xíu :
VB.NET:
Dim strData() As String = {"A", "B", "C", "D", "E"}
'Add data
ComboBox1.Items.AddRange(strData)
 
Top