Dưới đây chúng ta sẽ xem xét một chương trình trong Excel VBA tạo một Biểu mẫu người dùng có chứa hộp tổ hợp nhiều cột.

Userform mà chúng ta sẽ tạo ra như sau:

Multicolumn Combo Box in Excel VBA

Để tạo Biểu mẫu người dùng này, hãy thực hiện các bước sau.

  1. Mở Trình soạn thảo Visual Basic. Nếu Project Explorer không hiển thị, hãy bấm View, Project Explorer.

  2. Nhấp vào Chèn, Biểu mẫu người dùng. Nếu Hộp công cụ không tự động xuất hiện, hãy bấm Xem, Hộp công cụ. Màn hình của bạn sẽ được thiết lập như bên dưới.

Userform Screen Setup in Excel VBA

  1. Thêm nhãn, hộp tổ hợp và các nút lệnh. Khi điều này đã được hoàn thành, kết quả sẽ phù hợp với hình ảnh của Biểu mẫu người dùng được hiển thị trước đó. Ví dụ: tạo điều khiển hộp tổ hợp bằng cách nhấp vào ComboBox từ Hộp công cụ. Tiếp theo, bạn có thể kéo một hộp tổ hợp trên Biểu mẫu người dùng.

  2. Bạn có thể thay đổi tên và chú thích của các điều khiển. Tên được sử dụng trong mã VBA Excel. Phụ đề là những thứ xuất hiện trên màn hình của bạn. Bạn nên thay đổi tên của các điều khiển, nhưng không cần thiết ở đây vì chúng ta chỉ có một số điều khiển trong ví dụ này. Để thay đổi chú thích của Biểu mẫu người dùng, nhãn và các nút lệnh, hãy bấm Chế độ xem, Cửa sổ Thuộc tính và bấm vào từng điều khiển.

  3. Để hiển thị Biểu mẫu người dùng, hãy đặt một nút lệnh trên trang tính của bạn và thêm dòng mã sau:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Bây giờ chúng ta sẽ tạo Sub UserForm_Initialize. Khi bạn sử dụng phương thức Hiển thị cho Biểu mẫu người dùng, phụ này sẽ tự động được thực thi.

  1. Mở Trình soạn thảo Visual Basic.

  2. Trong Project Explorer, nhấp chuột phải vào UserForm1 và sau đó nhấp vào View Code.

  3. Chọn Userform từ danh sách thả xuống bên trái. Chọn Khởi tạo từ danh sách thả xuống bên phải.

  4. Thêm các dòng mã sau:

Private Sub UserForm_Initialize()

ComboBox1.ColumnCount = 2

Dim Films(1 To 5, 1 To 2) As String

Dim i As Integer, j As Integer

Films(1, 1) = "Lord of the Rings"

Films(2, 1) = "Speed"

Films(3, 1) = "Star Wars"

Films(4, 1) = "The Godfather"

Films(5, 1) = "Pulp Fiction"

Films(1, 2) = "Adventure"

Films(2, 2) = "Action"

Films(3, 2) = "Sci-Fi"

Films(4, 2) = "Crime"

Films(5, 2) = "Drama"

ComboBox1.List = Films

End Sub

Giải thích: Dòng mã đầu tiên đặt số cột của hộp tổ hợp thành 2. Thay vì đặt số cột trong thời gian chạy, bạn cũng có thể định cấu hình cài đặt này tại thời điểm thiết kế. Để đạt được điều này, nhấp chuột phải vào điều khiển hộp tổ hợp, nhấp vào Thuộc tính và đặt thuộc tính ColumnCount thành 2. Tiếp theo, chúng ta khai báo và khởi tạo một mảng hai chiều. Dòng mã cuối cùng gán mảng vào hộp tổ hợp.

Bây giờ chúng tôi đã tạo phần đầu tiên của Biểu mẫu người dùng. Mặc dù nó trông đã gọn gàng rồi, nhưng sẽ không có gì xảy ra khi chúng ta nhấp vào các nút lệnh trên Userform.

  1. Trong Project Explorer, nhấp đúp vào UserForm1.

  2. Nhấp đúp vào nút OK.

  3. Thêm các dòng mã sau:

Private Sub CommandButton1_Click()

Unload Me

MsgBox "You selected " & ComboBox1.Value

On Error Resume Next

MsgBox "You like " & ComboBox1.Column(1) & " movies"

End Sub

Lưu ý: các dòng mã này đóng Biểu mẫu người dùng VBA trong Excel và hiển thị mục và thể loại đã chọn. Câu lệnh ‘On Error Resume Next’ bỏ qua lỗi khi người dùng điền vào phim của chính mình (trong trường hợp này không có sẵn thể loại).

  1. Nhấp đúp vào nút Hủy.

  2. Thêm dòng mã sau:

Private Sub CommandButton2_Click()

Unload Me

End Sub

Kết quả khi bạn chọn Tốc độ và bấm OK.

Multicolumn Combo Box Result

Multicolumn Combo Box Result