使用两个文本框过滤列表框

时间:2018-12-27 10:34:31

标签: excel vba search filter listbox

我正在对列表框进行实时过滤,并尝试向过滤器添加另一个文本框。

我有一个文本框StoreBox。当我在C行中键入要搜索的数字时,它将从该行返回8列。我有工作。

但是我需要添加一个搜索日期。我需要能够分别或一起搜索商店编号和日期。因此,如果两者都在行中,它将返回...或者如果我只键入一个,它将返回一个标准。

所以StoreboxDateBox是我过滤的文本框。以下是我正在使用的代码,但我尝试过的所有方法均无效。我不能让第二个上班。

有人知道我如何更改代码以使其正常工作吗?

Private Sub StoreBox_Change()
    Sheets("Data").Activate
    Dim rw
    Dim strText As String

    strText = LCase(StoreBox.Text)
    dateText = LCase(DateBox.Text)
    Dim rng As Range
    Set rng = Range("C9:C5000")
    With ResultsBox
        .RowSource = ""
        .ColumnCount = 8
        For Each rw In rng.Rows
            If InStr(LCase(Cells(rw.Row, 3)), strText) Or InStr(LCase(Cells(rw.Row, 3)), strText) Then
                .AddItem Cells(rw.Row, 1).Value
                .List(ResultsBox.ListCount - 1, 0) = Cells(rw.Row, 2).Value
                .List(ResultsBox.ListCount - 1, 1) = Cells(rw.Row, 3).Value
                .List(ResultsBox.ListCount - 1, 2) = Cells(rw.Row, 4).Value
                .List(ResultsBox.ListCount - 1, 3) = Cells(rw.Row, 5).Value
                .List(ResultsBox.ListCount - 1, 4) = Cells(rw.Row, 6).Value
                .List(ResultsBox.ListCount - 1, 5) = Cells(rw.Row, 7).Value
                .List(ResultsBox.ListCount - 1, 7) = Cells(rw.Row, 9).Value
            End If

1 个答案:

答案 0 :(得分:0)

由于DateBox.Text应该过滤第5列,因此这应该可以解决问题:

If InStr(LCase(Cells(rw.Row, 3)), strText) Or InStr(LCase(Cells(rw.Row, 5)), dateText) Then

相对于Instr,我更愿意使用LCase()的compare参数

If InStr(1, Cells(rw.Row, 3).Value, strText, vbTextCompare) Or InStr(1, Cells(rw.Row, 5).Value, dateText, vbTextCompare) Then