首页 > 解决方案 > 使用文本框在 Excel 中使用 VBA 进行自动过滤

问题描述

嗨,我是 VBA 的新手,到目前为止我已经把它拼凑起来,我最终让它工作但不是 100%。

我正在尝试使用多个文本框来自动过滤数据。目前我仅将 2 用于测试目的,但最终希望将其扩展到 4。每个文本框当前过滤但覆盖其他文本框,我希望它们一起工作,所以如果我在第一个文本框中输入一个单词,它将返回该列中包含该单词的所有实例,然后当我在第二个单词中添加一个单词时,它将进一步过滤这些结果,

Private Sub TextBox1_Change()

If Len(TextBox1.Value) = 0 Then
        Sheet1.AutoFilterMode = False
Else
    If Sheet1.AutoFilterMode = True Then
        Sheet1.AutoFilterMode = False
    End If

Sheet1.Range("A2:C" & Rows.Count).AutoFilter field:=1, Criteria1:="*" & TextBox1.Value & "*"
End If

End Sub

Private Sub TextBox2_Change()

If Len(TextBox2.Value) = 0 Then
        Sheet1.AutoFilterMode = False
Else
    If Sheet1.AutoFilterMode = True Then
        Sheet1.AutoFilterMode = False
    End If

Sheet1.Range("A2:C" & Rows.Count).AutoFilter field:=2, Criteria1:="*" & TextBox2.Value & "*"
End If

End Sub

任何帮助,将不胜感激。

标签: excelvbafiltering

解决方案


你在寻找类似的东西吗

Private Sub TextBox1_Change()
    filterTextboxes
End Sub

Private Sub TextBox2_Change()
    filterTextboxes
End Sub

Private Sub filterTextboxes()    

    If Len(TextBox1.Value) = 0 And Len(TextBox2.Value) = 0 Then
        Sheet1.AutoFilterMode = False
    Else
        If Sheet1.AutoFilterMode = True Then
            Sheet1.AutoFilterMode = False
        End If

        Sheet1.Range("A2:C" & Rows.Count).AutoFilter Field:=1, Criteria1:="*" & _
            TextBox1.Value & "*", Operator:=xlAnd
        Sheet1.Range("A2:C" & Rows.Count).AutoFilter Field:=2, Criteria1:="*" & _
            TextBox2.Value & "*", Operator:=xlAnd
    End If

End Sub

推荐阅读