Untitled

 avatar
unknown
plain_text
a year ago
2.8 kB
13
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