编辑:我尝试了@HeadofCatering 的解决方案,但最初它失败了。但是,我在引用的列中填写了值并且它起作用了(我的解决方案在相反的条件下也失败了 - 使列标题为空白并且它失败了)。
但是,这与我(也许您已经)看到的内容并不完全吻合——您绝对可以将过滤器添加到带有空白标题的列中。然而,在我看到的失败中有一件事是一致的 -filterColumn
引用的列在Application.UsedRange
. 您可能想尝试验证您所引用的列实际上是否在其中Application.UsedRange
(简单的方法:Application.UsedRange.Select
在即时窗口中运行并查看您的列是否被选中)。由于您引用了相当数量的列,因此可能没有超过某个点(包括列标题)的值,并且当您指定要过滤的列时,您实际上是在指定UsedRange
.
一个有趣的(这对我来说也是新的)测试的事情是拿一张白纸,在单元格中填写值A1
,B1
选择列A:G
并手动添加自动过滤器 - 这只会将过滤器添加到 A 和 B 列(相关情况可以是如果您尝试将过滤器添加到完全空白的工作表中,则会发现)。
抱歉唠叨-这甚至不是您的问题:)
旧解决方案(在使用上述条件时不起作用)
我可能会矫枉过正,但也尝试设置工作表值(注意我在这里使用了示例范围):
Sub SOTest()
Dim ws As Worksheet
Dim filterColumn As Integer
' Set the sheet object and declare your variable
Set ws = ActiveSheet
filterColumn = 2
' Now try the filter
ws.Range("$A$1:$E$10").AutoFilter Field:=filterColumn, Criteria1:="<>"
End Sub