Untitled
unknown
plain_text
a year ago
2.8 kB
14
Indexable
Option Explicit
Dim arrCheDo() As String
Dim isFiltering As Boolean
Dim isSelecting As Boolean
'========================
' NẠP DỮ LIỆU TỪ SHEET
'========================
Private Sub LoadCheDoFromSheet()
Dim ws As Worksheet, lastR As Long
Dim v As Variant, i As Long, n As Long
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Danhmuc") ' Đổi đúng tên sheet
On Error GoTo 0
If ws Is Nothing Then
MsgBox "Không tìm thấy sheet Danhmuc!", vbCritical
Exit Sub
End If
lastR = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
If lastR < 6 Then Exit Sub
v = ws.Range("B6:B" & lastR).Value ' đọc vùng dữ liệu
ReDim arrCheDo(1 To UBound(v, 1))
n = 0
For i = 1 To UBound(v, 1)
If Trim$(CStr(v(i, 1))) <> "" Then
n = n + 1
arrCheDo(n) = CStr(v(i, 1))
End If
Next i
If n = 0 Then
Erase arrCheDo
Else
ReDim Preserve arrCheDo(1 To n)
End If
End Sub
'========================
' ĐỔ DANH SÁCH VÀO COMBO (lọc hoặc full)
'========================
Private Sub FillChedoCombo(ByVal filterText As String)
Dim i As Long, s As String
Me.cboChedo.Clear
If Not IsArray(arrCheDo) Then Exit Sub
filterText = LCase$(Trim$(filterText))
For i = LBound(arrCheDo) To UBound(arrCheDo)
s = arrCheDo(i)
If filterText = "" Then
Me.cboChedo.AddItem s
ElseIf InStr(1, LCase$(s), filterText, vbTextCompare) > 0 Then
Me.cboChedo.AddItem s
End If
Next i
End Sub
'========================
' GÕ CHỮ → LỌC DANH SÁCH
'========================
Private Sub cboChedo_Change()
Dim t As String
If isFiltering Or isSelecting Then Exit Sub
If Me.cboChedo.ListIndex >= 0 Then Exit Sub ' nếu là chọn từ list thì bỏ qua
isFiltering = True
t = Me.cboChedo.Text
FillChedoCombo t
Me.cboChedo.Text = t
Me.cboChedo.SelStart = Len(t) ' giữ con trỏ cuối
If Me.cboChedo.ListCount > 0 Then Me.cboChedo.DropDown
isFiltering = False
End Sub
'========================
' BẤM NÚT XỔ → HIỆN FULL LIST
'========================
Private Sub cboChedo_DropButtonClick()
If isFiltering Then Exit Sub
isFiltering = True
FillChedoCombo "" ' full list
Me.cboChedo.DropDown
isFiltering = False
End Sub
'========================
' CHỌN TRONG LIST → HIỆN GIÁ TRỊ
'========================
Private Sub cboChedo_Click()
If Me.cboChedo.ListIndex >= 0 Then
isSelecting = True
' Excel tự gán Text khi chọn → không cần viết lại
isSelecting = False
End If
End Sub
Editor is loading...
Leave a Comment