首页 > 解决方案 > 为 Excel 表中的列实现类似“标签”的过滤器?

问题描述

我在 excel 表中有一个列,其中可能包含以下值:

我想实现一个可以过滤这些值的宏,这样如果我过滤“5”,就会出现第一个和第三个结果。另外,我将 ALL 包含在列表中,因为将来可能会添加文本标签。这是我到目前为止所拥有的,但结果不一致:

Sub ContainsFilter()
    Dim strName As String
    strName = InputBox("What would you like to search for?")
    If strName = "" Then
    ActiveSheet.ShowAllData
    Else
    ActiveSheet.ListObjects("Table").Range.AutoFilter Field:=7, Criteria1:="=*" & strName & "*", Operator:=xlAnd
    End If
End Sub

标签: excelvbaexcel-tables

解决方案


以下应该有效:

Option Explicit

Public Sub ContainsFilter()
    Dim InputReturn As Variant
    InputReturn = Application.InputBox(Prompt:="What would you like to search for?", Title:="Filter Field 7", Type:=2) ' type 2 = string
    
    If VarType(InputReturn) = vbBoolean And InputReturn = False Then
        ' User pressed cancel button or X in the right corner
        Exit Sub
    End If
    
    If InputReturn = vbNullString Then
        ActiveSheet.ShowAllData
    Else
        ActiveSheet.ListObjects("Table").Range.AutoFilter Field:=7, Criteria1:=Array("*" & InputReturn & "*", InputReturn), Operator:=xlFilterValues
    End If
End Sub

推荐阅读