Skip to content

Instantly share code, notes, and snippets.

@DuongAQ
Last active March 23, 2018 02:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DuongAQ/c49e0d758f180f2d99c9254e938a8b38 to your computer and use it in GitHub Desktop.
Save DuongAQ/c49e0d758f180f2d99c9254e938a8b38 to your computer and use it in GitHub Desktop.
Private Sub ComboBox1_Change() 'Sự kiện thay đổi danh sách tại ComboBox2
Dim rng As Range 'Tạo biến Vùng danh sách gốc
Dim r As Range 'Tạo biến để thực hiện vòng lặp giúp kiểm tra danh sách nạp vào ComboBox2
Dim Dic As Object 'Tạo biến thư viện để gọi đối tượng dictionary
Dim ws As Worksheet ' Tạo biến Sheet chứa danh sách gốc
Set ws = ActiveSheet 'Sheet chứa danh sách gốc là sheet đang làm việc (khi combobox đặt trong Sheet danh sách)
'Nếu khác combobox đặt tại sheet khác thì cần tham chiếu tới sheet chứa danh sách gốc
Set rng = ws.Range("A2", ws.Range("A" & Rows.Count).End(xlUp)) 'Vùng danh sách gốc ở cột A, từ ô A2 tới dòng cuối có dữ liệu
Set Dic = CreateObject("scripting.dictionary") 'Thiết lập đối tượng dictionary
Dic.CompareMode = vbTextCompare 'Thực hiện việc so sánh các ký tự text trong thư viện dictionary
'Thực hiện vòng lặp để xét các nội dung được chọn ở cột danh sách bậc 1
For Each r In rng 'Bắt đầu vòng lặp
If r = ComboBox1 Then 'Nếu giá trị trong danh sách bậc 1 trùng với giá trị đã chọn ở ComboBox1
Dic(r.Offset(, 1).Value) = Empty 'Những giá trị nào trùng lặp ở cột danh sách bậc 2 sẽ bị loại bỏ (DS bậc 2 cách DS bậc 1 là 1 cột)
End If
Next 'Thực hiện vòng lặp đến hết các giá trị trong danh sách bậc 1
'Lấy các kết quả còn lại trong dictionary vào ComboBox2
With ComboBox2
.List = Application.Transpose(Dic.keys)
.ListIndex = 0
End With
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment