Lọc listbox theo textbox

  • Thread starter haokira
  • Ngày gửi
H

haokira

Guest
Nhờ mọi người trợ giúp em vấn đề sau ạ:
Em tạo 1 form trong đó có 1 listbox và 1 textbox.
Listbox hiện dữ liệu lọc từ sheet Data. Bình thường nếu em cho kết quả lọc đó ra sheet khác xong mới cho vào listbox thì lọc listbox theo textbox được. Nhưng bây giờ khi em đưa trực tiếp kết quả vào listbox thì không biết viết thế nào ạ. Nhờ mọi người giúp đỡ ạ.
Em cảm ơn.
Link File ạ:
 

tuhocvba

Administrator
Thành viên BQT
Bạn tham khảo topic về listbox ở đây:
 
H

haokira

Guest
Bạn tham khảo topic về listbox ở đây:
Dạ, em cảm ơn ạ.
Em đã đọc topic đó rồi ạ, nhưng vẫn không thể áp dụng được file của em ạ :((
 

phamthach

Yêu THVBA nhất
Bạn coi đúng k nhé.
Bạn cần đăng nhập để thấy hình ảnh

 
H

haokira

Guest
Trong code mình có coment khá rõ.
Tất cả trong đó đều học hỏi dưới sự giúp đỡ của các thành viên trong diễn đàn mình.
Hãy dành lời cảm ơn đó cho diễn đàn nhé bạn
Dạ vâng, em cảm ơn diễn đàn & các anh chị ạ.
 

mrbomst

Yêu THVBA
Chuẩn luôn anh ạ. Mấy cái code thêm vào còn cách em 1 khoảng quá xa ạ =))
Cám ơn anh ạ.
link die rồi mong bác có thể gửi lại file hay code không ạ.
em đang muốn áp dụng vào file của em để lọc nhưng chưa biết làm. nếu có thể bác giúp em trên file của em được không ạ!
 
H

haokira

Guest
Code đây bạn nhé
Mã:
Private Sub TextBox6_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  'Khi txt6 dung phim len or xuong
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub   'Khi nhan phim mui ten xuong or len
    If KeyCode = 13 Then    'Phim tro lai/enter
        Me.TextBox6.SetFocus    'Setfocus cho txt6
        Exit Sub
    End If
'-----------------------------------'Loc du lieu tu listbox theo txt6
    Dim lr As Integer   'Khai bao bien
    Dim i, a   As Integer
    Dim dk1 As String
    Dim kq, dk2
    Const rt As Byte = 1 'Tieu de dong 1    'Giu tieu de dong 1
    dk1 = UCase(TextBox6.text) 'dua toan bo chu Hoa thanh chu thuong
    dk2 = UniConvert(dk1, "Telex") 'Unicode
    With ListBox1
        .Clear      ' xoa toan bo listbox
        .ColumnCount = 7    ' Chia listbox thnh 7 cot
        '.ColumnWidths = "20;90;60;60;60;60;0"    'Chia do dong cua cac cot trong listbox
        '.ListStyle = fmListStyleOption
        .MultiSelect = False    'Chon nhieu dong trong listbox là false
    ReDim kq(1 To UBound(Arrkq), 1 To 7)  ' Khai bao lai mang (kq) theo mang da gan vao listbox 'So cot là:7
        For i = LBound(Arrkq, 1) To UBound(Arrkq, 1) Step 1 'Cho i chay tu ... den ...
           If InStr(1, UCase(Arrkq(i, 3)), dk2) Then 'Tim cac ky tu danh vao textbox(txt_tenhang.value) trong mang ArrKQ()
                a = a + 1                                   'Tim theo dk2 trong cot 3 mang ArrKQ
                kq(a, 1) = Arrkq(i, 1)  'Gan ket qua vao mang kq
                kq(a, 2) = Arrkq(i, 2)
                kq(a, 3) = Arrkq(i, 3)
                kq(a, 4) = Arrkq(i, 4)
                kq(a, 5) = Arrkq(i, 5)
                kq(a, 6) = Arrkq(i, 6)
                kq(a, 7) = Arrkq(i, 7)
            End If
        Next i
               ListBox1.List = kq 'dua ket qua loc vao listbox
    End With
End Sub
 

mrbomst

Yêu THVBA
Code đây bạn nhé
Mã:
Private Sub TextBox6_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  'Khi txt6 dung phim len or xuong
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub   'Khi nhan phim mui ten xuong or len
    If KeyCode = 13 Then    'Phim tro lai/enter
        Me.TextBox6.SetFocus    'Setfocus cho txt6
        Exit Sub
    End If
'-----------------------------------'Loc du lieu tu listbox theo txt6
    Dim lr As Integer   'Khai bao bien
    Dim i, a   As Integer
    Dim dk1 As String
    Dim kq, dk2
    Const rt As Byte = 1 'Tieu de dong 1    'Giu tieu de dong 1
    dk1 = UCase(TextBox6.text) 'dua toan bo chu Hoa thanh chu thuong
    dk2 = UniConvert(dk1, "Telex") 'Unicode
    With ListBox1
        .Clear      ' xoa toan bo listbox
        .ColumnCount = 7    ' Chia listbox thnh 7 cot
        '.ColumnWidths = "20;90;60;60;60;60;0"    'Chia do dong cua cac cot trong listbox
        '.ListStyle = fmListStyleOption
        .MultiSelect = False    'Chon nhieu dong trong listbox là false
    ReDim kq(1 To UBound(Arrkq), 1 To 7)  ' Khai bao lai mang (kq) theo mang da gan vao listbox 'So cot là:7
        For i = LBound(Arrkq, 1) To UBound(Arrkq, 1) Step 1 'Cho i chay tu ... den ...
           If InStr(1, UCase(Arrkq(i, 3)), dk2) Then 'Tim cac ky tu danh vao textbox(txt_tenhang.value) trong mang ArrKQ()
                a = a + 1                                   'Tim theo dk2 trong cot 3 mang ArrKQ
                kq(a, 1) = Arrkq(i, 1)  'Gan ket qua vao mang kq
                kq(a, 2) = Arrkq(i, 2)
                kq(a, 3) = Arrkq(i, 3)
                kq(a, 4) = Arrkq(i, 4)
                kq(a, 5) = Arrkq(i, 5)
                kq(a, 6) = Arrkq(i, 6)
                kq(a, 7) = Arrkq(i, 7)
            End If
        Next i
               ListBox1.List = kq 'dua ket qua loc vao listbox
    End With
End Sub
bác có thể gửi file em tham khảo được không ạ, nà nếu em dùng mã này cho textbox và listbox không ở trên form mà được tạo trêo sheet thì sửa lại sao ạ.
 

Dim i as long

Yêu THVBA
Code đây bạn nhé
Mã:
Private Sub TextBox6_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  'Khi txt6 dung phim len or xuong
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub   'Khi nhan phim mui ten xuong or len
    If KeyCode = 13 Then    'Phim tro lai/enter
        Me.TextBox6.SetFocus    'Setfocus cho txt6
        Exit Sub
    End If
'-----------------------------------'Loc du lieu tu listbox theo txt6
    Dim lr As Integer   'Khai bao bien
    Dim i, a   As Integer
    Dim dk1 As String
    Dim kq, dk2
    Const rt As Byte = 1 'Tieu de dong 1    'Giu tieu de dong 1
    dk1 = UCase(TextBox6.text) 'dua toan bo chu Hoa thanh chu thuong
    dk2 = UniConvert(dk1, "Telex") 'Unicode
    With ListBox1
        .Clear      ' xoa toan bo listbox
        .ColumnCount = 7    ' Chia listbox thnh 7 cot
        '.ColumnWidths = "20;90;60;60;60;60;0"    'Chia do dong cua cac cot trong listbox
        '.ListStyle = fmListStyleOption
        .MultiSelect = False    'Chon nhieu dong trong listbox là false
    ReDim kq(1 To UBound(Arrkq), 1 To 7)  ' Khai bao lai mang (kq) theo mang da gan vao listbox 'So cot là:7
        For i = LBound(Arrkq, 1) To UBound(Arrkq, 1) Step 1 'Cho i chay tu ... den ...
           If InStr(1, UCase(Arrkq(i, 3)), dk2) Then 'Tim cac ky tu danh vao textbox(txt_tenhang.value) trong mang ArrKQ()
                a = a + 1                                   'Tim theo dk2 trong cot 3 mang ArrKQ
                kq(a, 1) = Arrkq(i, 1)  'Gan ket qua vao mang kq
                kq(a, 2) = Arrkq(i, 2)
                kq(a, 3) = Arrkq(i, 3)
                kq(a, 4) = Arrkq(i, 4)
                kq(a, 5) = Arrkq(i, 5)
                kq(a, 6) = Arrkq(i, 6)
                kq(a, 7) = Arrkq(i, 7)
            End If
        Next i
               ListBox1.List = kq 'dua ket qua loc vao listbox
    End With
End Sub
Em chưa biết cách chèn code như của bác vào bài viết. Xin bác chỉ giúp em được không ạ? em cảm ơn nhiều !
 

rungto

Yêu THVBA
Code đây bạn nhé
Mã:
Private Sub TextBox6_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  'Khi txt6 dung phim len or xuong
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub   'Khi nhan phim mui ten xuong or len
    If KeyCode = 13 Then    'Phim tro lai/enter
        Me.TextBox6.SetFocus    'Setfocus cho txt6
        Exit Sub
    End If
'-----------------------------------'Loc du lieu tu listbox theo txt6
    Dim lr As Integer   'Khai bao bien
    Dim i, a   As Integer
    Dim dk1 As String
    Dim kq, dk2
    Const rt As Byte = 1 'Tieu de dong 1    'Giu tieu de dong 1
    dk1 = UCase(TextBox6.text) 'dua toan bo chu Hoa thanh chu thuong
    dk2 = UniConvert(dk1, "Telex") 'Unicode
    With ListBox1
        .Clear      ' xoa toan bo listbox
        .ColumnCount = 7    ' Chia listbox thnh 7 cot
        '.ColumnWidths = "20;90;60;60;60;60;0"    'Chia do dong cua cac cot trong listbox
        '.ListStyle = fmListStyleOption
        .MultiSelect = False    'Chon nhieu dong trong listbox là false
    ReDim kq(1 To UBound(Arrkq), 1 To 7)  ' Khai bao lai mang (kq) theo mang da gan vao listbox 'So cot là:7
        For i = LBound(Arrkq, 1) To UBound(Arrkq, 1) Step 1 'Cho i chay tu ... den ...
           If InStr(1, UCase(Arrkq(i, 3)), dk2) Then 'Tim cac ky tu danh vao textbox(txt_tenhang.value) trong mang ArrKQ()
                a = a + 1                                   'Tim theo dk2 trong cot 3 mang ArrKQ
                kq(a, 1) = Arrkq(i, 1)  'Gan ket qua vao mang kq
                kq(a, 2) = Arrkq(i, 2)
                kq(a, 3) = Arrkq(i, 3)
                kq(a, 4) = Arrkq(i, 4)
                kq(a, 5) = Arrkq(i, 5)
                kq(a, 6) = Arrkq(i, 6)
                kq(a, 7) = Arrkq(i, 7)
            End If
        Next i
               ListBox1.List = kq 'dua ket qua loc vao listbox
    End With
End Sub
Lỗi ngay dòng 21:
Private Sub txt_tim_kiem_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub   'Khi nhan phim mui ten xuong or len
    If KeyCode = 13 Then    'Phim tro lai/enter
        Me.txt_tim_kiem.SetFocus    'Setfocus cho txt6
        Exit Sub
    End If
'-----------------------------------'Loc du lieu tu listbox theo txt6
    Dim lr As Integer   'Khai bao bien
    Dim i, a   As Integer
    Dim dk1 As String
    Dim kq, dk2
    Const rt As Byte = 1 'Tieu de dong 1    'Giu tieu de dong 1
    dk1 = UCase(txt_tim_kiem.Text) 'dua toan bo chu Hoa thanh chu thuong
    dk2 = UniConvert(dk1, "Telex") 'Unicode
    With lst_ket_qua_tim_kiem
        .Clear      ' xoa toan bo listbox
        .ColumnCount = 11    ' Chia listbox thnh 11 cot
        '.ColumnWidths = "20;90;60;60;60;60;0"    'Chia do dong cua cac cot trong listbox
        .ListStyle = fmListStyleOption
        .MultiSelect = False    'Chon nhieu dong trong listbox là false
    ReDim kq(1 To UBound(Arrkq), 1 To 11)  ' Khai bao lai mang (kq) theo mang da gan vao listbox 'So cot là:7
        For i = LBound(Arrkq, 1) To UBound(Arrkq, 1) Step 1 'Cho i chay tu ... den ...
           If InStr(1, UCase(Arrkq(i, 3)), dk2) Then 'Tim cac ky tu danh vao textbox(txt_tenhang.value) trong mang ArrKQ()
                a = a + 1                                   'Tim theo dk2 trong cot 3 mang ArrKQ
                kq(a, 1) = Arrkq(i, 1)  'Gan ket qua vao mang kq
                kq(a, 2) = Arrkq(i, 2)
                kq(a, 3) = Arrkq(i, 3)
                kq(a, 4) = Arrkq(i, 4)
                kq(a, 5) = Arrkq(i, 5)
                kq(a, 6) = Arrkq(i, 6)
                kq(a, 7) = Arrkq(i, 7)
                kq(a, 8) = Arrkq(i, 8)
                kq(a, 9) = Arrkq(i, 9)
                kq(a, 10) = Arrkq(i, 10)
                kq(a, 11) = Arrkq(i, 11)
            End If
        Next i
               lst_ket_qua_tim_kiem.List = kq 'dua ket qua loc vao listbox
    End With
End Sub
Mình chèn code của bạn vào form của mình nhưng báo lỗi Type mismatch bạn ơi! Xử lý dùm mình được ko bạn? Cám ơn bạn rất nhiều!
 
Top