Excel VBA Range.AutoFilter等号筛选(“=”)

Excel VBA Range.AutoFilter等号筛选(“=”),vba,excel,autofilter,Vba,Excel,Autofilter,我有一个表tbl\u recommendations,在第13列中包含以下值:-,-,=,+,++ 现在,我想筛选=,+,++。手动操作效果很好,但是,在使用VBA对=进行过滤时,我遇到了一些问题。只需使用宏记录器,它就会给出以下代码: Sub Test() ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _ Criteria1:=Array("+", "++", " = "), Op

我有一个表
tbl\u recommendations
,在第13列中包含以下值:
-
-
=
+
++

现在,我想筛选
=
+
++
。手动操作效果很好,但是,在使用VBA对
=
进行过滤时,我遇到了一些问题。只需使用宏记录器,它就会给出以下代码:

Sub Test()

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", " = "), Operator:=xlFilterValues

End Sub
ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues

执行此宏时,它只过滤
+
+
,而不过滤
=
。诀窍是什么?

这是基于在进行过滤时录制宏,并且似乎有效:

Sub Test()

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues

End Sub
ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
Criteria1:=Array("=+", "=++", "=="), Operator:=xlFilterValues

这很奇怪,但是如果您运行宏记录器来筛选“+”、“+”和“=”(带空格)条件,那么:

  • 它编写以下代码:

    Sub Test()
    
    ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
        Criteria1:=Array("+", "++", " = "), Operator:=xlFilterValues
    
    End Sub
    
    ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues
    
    因此,它删除“=”字符前后的“空格”

  • 它正确过滤表13列中显示带“+”、“++”和“=”(带空格)内容的记录的表

但如果运行该宏,它将不再过滤“=”(带空格)记录

假设一定有一些涉及过滤器和“=”字符的巫术,您可以使用以下小解决方法来阻止它:

With ActiveSheet.ListObjects("tbl_recommendations").Range
    .columns(13).Replace what:=" = ", Replacement:="|=|", lookat:=xlWhole '<--| substitute "forbidden" " = " criteria with a "valid" one
    .AutoFilter Field:=13, Criteria1:=Array("+", "++", "|=|"), Operator:=xlFilterValues '<--| filter with "valid" criteria

        ' your code to act on filtered cells
        '....

    .columns(13).Replace what:="|=|", Replacement:=" = ", lookat:=xlWhole '<--| finally bring " = " back in place!
End With
与ActiveSheet.ListObjects(“tbl_建议”).Range

.columns(13)。替换内容:=“=”,替换:=“|=|”,查看:=xlother'我试图在每个字符前添加一个额外的等号,似乎有效:

Sub Test()

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues

End Sub
ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
Criteria1:=Array("=+", "=++", "=="), Operator:=xlFilterValues

您是否尝试过在
=
后面不加空格?似乎使用
“=”
可以保存过滤器,以便只显示指定字段的空格,方法是使用:
标准1:=“=”
,阅读这里@ShaiRado您是对的。但是,我希望一定存在这种可能性,因为我可以手动筛选
=
。@Veve…删除周围的空格并不重要。没有版本正在运行…我无法确认您的解决方案是否正常运行。它不显示行值
=
。如果
“=”
没有空格,它就可以工作,但是当输入
“=”
时,IDE看起来有点像雪花,因为它有时会莫名其妙地输入等号前后的空格。尝试删除您的测试子项,启动一个新的Test2子项,并将上述命令复制/粘贴到其中。@Andi,您完成了吗?