Menu

Tự động hóa việc nhập liệu Excel với UserForm và ComboBox lồng nhau

Vương Thêu Dinh 06/06/2026 18:06 93 lượt xem 2 trả lời

Chào các bác, dạo này em đang phải xử lý một file Excel với rất nhiều dữ liệu cần nhập thủ công. Em có tham khảo mấy bài viết trong này về UserForm và ComboBox, thấy khá hay nhưng em gặp một vấn đề hơi 'khoai' một chút.

Tình huống của em là thế này: Em muốn tạo một UserForm để nhập thông tin sản phẩm. Sẽ có 2 ComboBox chính. ComboBox đầu tiên là 'Danh mục sản phẩm' (ví dụ: Điện thoại, Laptop, Phụ kiện). ComboBox thứ hai là 'Loại sản phẩm'. Vấn đề là, khi em chọn 'Điện thoại' ở ComboBox 1, thì ComboBox 2 chỉ nên hiển thị các loại điện thoại (ví dụ: iPhone, Samsung, Xiaomi). Tương tự, nếu chọn 'Laptop' thì ComboBox 2 chỉ hiện các loại laptop (ví dụ: Dell, HP, Macbook).

Em đã thử tìm hiểu về sự kiện Change của ComboBox đầu tiên để nạp dữ liệu cho ComboBox thứ hai, nhưng code hơi lằng nhằng và chưa chạy ổn. Có bác nào có kinh nghiệm về việc này không ạ? Em muốn làm sao để ComboBox 2 có thể 'lồng' vào ComboBox 1, chỉ hiển thị các lựa chọn phù hợp.

Em đang dùng VBA Excel 2016. Bác nào có đoạn code mẫu hoặc hướng dẫn chi tiết thì cho em xin với ạ. Em xin cảm ơn nhiều!

4

Hay quá bạn ơi! Vụ ComboBox lồng nhau này đúng là vấn đề nhiều người hay gặp khi mới bắt đầu với UserForm.

Thường thì để giải quyết trường hợp này, bạn sẽ cần làm 2 bước chính:

  1. Sự kiện Change của ComboBox 1: Khi người dùng chọn một mục ở ComboBox 1 (ví dụ: "Điện thoại"), bạn sẽ cần viết code trong sự kiện ComboBox1_Change() để nạp dữ liệu tương ứng cho ComboBox 2. Ví dụ, nếu chọn "Điện thoại", bạn sẽ nạp "iPhone", "Samsung", "Oppo"... vào ComboBox 2.
  2. Nạp dữ liệu ban đầu: Đừng quên nạp danh mục cho ComboBox 1 ngay khi UserForm hiển thị (sự kiện UserForm_Initialize()).

Bạn đã thử cách này chưa? Nếu gặp khó khăn ở đoạn code nạp dữ liệu thì cứ chia sẻ thêm nhé, mọi người cùng gỡ rối.

5

Tình huống của bạn với ComboBox lồng nhau khá phổ biến khi mới làm quen với UserForm đấy. Bạn đã đi đúng hướng khi nghĩ đến việc dùng sự kiện Change rồi.

Để chi tiết hơn, sau khi bạn nạp danh mục cho ComboBox 1 ở sự kiện UserForm_Initialize(), trong sự kiện ComboBox1_Change() bạn sẽ cần một logic để kiểm tra giá trị được chọn ở ComboBox 1. Dựa vào đó, bạn sẽ thêm các mục tương ứng vào ComboBox2.AddItem hoặc ComboBox2.List.

Ví dụ đơn giản:

``vba Private Sub ComboBox1_Change() If ComboBox1.Value = "Điện thoại" Then ComboBox2.Clear ' Xóa các mục cũ trước khi nạp mới ComboBox2.AddItem "iPhone" ComboBox2.AddItem "Samsung" ' ... thêm các hãng điện thoại khác ElseIf ComboBox1.Value = "Laptop" Then ComboBox2.Clear ComboBox2.AddItem "Dell" ComboBox2.AddItem "HP" ' ... thêm các hãng laptop khác End If End Sub ``

Bạn đã thử cách này chưa? Có phần nào trong code bạn đang gặp khó khăn không, chia sẻ thêm để mọi người cùng xem nhé!

5

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký