Cách tạo Combobox có danh sách phụ thuộc nhau

Chia sẻ bài viết này:
  • 1
  •  
  •  
  •  
  •  
  •  
  •   
  •   

Trong bài trước chúng ta đã tìm hiểu về cách sử dụng ComboBox và tạo danh sách không bị trùng trong Combobox. Và để nâng cao hơn kiến thức về Combobox, chúng ta cùng tìm hiểu cách tạo ra những Combobox có danh sách phụ thuộc nhau. Điều này nghĩa là: Mỗi giá trị được chọn ở Combobox này sẽ làm thay đổi danh sách nạp vào ở Combobox khác.

Những nội dung chúng ta cần tìm hiểu trong bài học này bao gồm:

  • Phân cấp bậc các danh sách theo combobox
  • Tạo combobox tương ứng theo các danh sách
  • Tạo danh sách không trùng  bằng vba trong từng combobox
  • Tạo điều kiện phụ thuộc nhau cho các danh sách trong combobox

1. Phân cấp bậc các danh sách theo combobox

Để hình dung về cấp bậc các danh sách, chúng ta xét ví dụ sau:

Trong hình trên chúng ta thấy: Mỗi nhân viên tại cột C sẽ nằm trong 1 nhóm cụ thể trong cột B, và mỗi nhóm lại thuộc một bộ phận nhất định trong cột A.

Như vậy có sự phân cấp bậc các danh sách như sau:

Bộ phận > Nhóm > Nhân viên

  • Bộ phận là danh sách có cấp bậc lớn nhất, gọi là bậc 1
  • Nhóm là danh sách có cấp bậc nhỏ hơn bộ phận, phụ thuộc vào nội dung của Bộ phận, gọi là bậc 2
  • Nhân viên là danh sách có cấp bậc nhỏ nhất, phụ thuộc vào nội dung của Nhóm, gọi là bậc 3

Vậy mục tiêu chúng ta cần đạt được là:

  • Với mỗi bộ phận được chọn trong Combobox1 thì danh sách nhóm trong Combobox2 cần phải thay đổi tương ứng theo bộ phận đó.
  • Với mỗi nhóm được chọn trong Combobox2 thì danh sách nhân viên trong Combobox3 cần phải thay đổi tương ứng theo nhóm đó.

2. Tạo combobox tương ứng theo các danh sách

Ở đây chúng ta có 3 danh sách nên sẽ cần tạo 3 combobox có tên lần lượt là Combobox1, Combobox2, Combobox3

Chúng ta sẽ sắp xếp thứ tự các combobox lần lượt như sau:

Combobox1 sẽ lấy danh sách Bộ phận

Combobox2 sẽ lấy danh sách Nhóm

Combobox3 sẽ lấy danh sách Nhân viên

3. Tạo danh sách không trùng trong Combobox

Ở các danh sách Bộ phận và Nhóm chúng ta thấy có xuất hiện các giá trị trùng nhau. Do đó để cho danh sách chọn của combobox không xuất hiện các giá trị trùng này thì chúng ta có thể áp dụng cách làm tương tự ở bài trước để thực hiện.

Tạo danh sách không trùng trong Combobox1:

Từ các combobox2 và combobox3 chúng ta thấy nó phụ thuộc vào nội dung của combobox bậc trước nó, do đó chúng ta sẽ kết hợp việc tạo điều kiện phụ thuộc với việc lọc các giá trị trùng.

4. Tạo điều kiện phụ thuộc nhau giữa các danh sách

Như đã lập luận ở trên: “Với mỗi bộ phận được chọn trong Combobox1 thì danh sách nhóm trong Combobox2 cần phải thay đổi tương ứng theo bộ phận đó” => Như vậy việc thay đổi danh sách chọn trong combobox2 phụ thuộc vào việc nội dung trong combobox1 có thay đổi hay không. Điều này trong VBA được gọi là sự kiện Combobox1_Change

Tại Sheet chứa các combobox cần thực hiện (ở đây là Sheet3) chọn đối tượng Combobox thay cho Worksheet, tiếp đó chọn sự kiện Change cho combobox đó (sự kiện Change sẽ là mặc định khi chọn đối tượng Combobox)

Câu lệnh VBA được viết như sau:

Như vậy chúng ta đã có thể tạo được danh sách tại ComboBox2 phụ thuộc vào mỗi giá trị được chọn tại Combobox1 rồi.

Tiếp theo là để ComboBox3 phụ thuộc vào ComboBox2 thì chúng ta làm như sau:

  • Tạo sự kiện thay đổi ở combobox2: Private Sub ComboBox2_Change
  • Copy nội dung của Private Sub ComboBox1_Change và paste vào đây
  • Sửa các nội dung: Biến rng thay vì áp dụng Range cho cột A thì sửa thành cột B
  • Tại vòng lặp với biến r thì xét r = ComboBox2
  • Cuối cùng khi lấy dữ liệu vào Combobox thì đổi thành ComboBox3

Câu lệnh VBA như sau (những nội dung thay đổi cần chú ý được đặt trong phần dấu ***)

Như vậy chúng ta đã hoàn thành được yêu cầu ban đầu rồi.

Một lưu ý là trong ComboBox đôi khi bị lỗi font chữ khi chúng ta chọn 1 giá trị tiếng việt có dấu. Để khắc phục điều này thì chúng ta có thể có 1 số cách sau:

  • Sử dụng tiếng việt không dấu
  • Tạo liên kết từ combobox ra 1 vị trí tại worksheet để có kết quả đúng (dù lỗi font hiển thị nhưng kết quả liên kết vẫn đúng)
  • Sử dụng bộ gõ khác (hết sức lưu ý vì có thể lỗi font khi gửi sang máy tính khác)

Cảm ơn các bạn đã theo dõi bài viết

——-

Tải về file mẫu

Chúc các bạn học tốt cùng Học Excel Online!


Chia sẻ bài viết này:
  • 1
  •  
  •  
  •  
  •  
  •  
  •   
  •