我有一个数据表,其中顶行是过滤器,我有一个循环,可以更改需要在循环内使用哪个过滤器的变量filterColumn,每次循环运行时都会为其分配一个新值。 / p>
当我尝试使用filterColumn来确定哪个过滤器将被打开'我收到错误
Range Class Failed的自动过滤方法
ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, Criteria1:="<>"
使用变量确定过滤器所在的字段的正确语法是什么?
解决了问题我找到了解决方案。我在整个工作表方面引用了过滤器列位置,实际上我应该引用它在过滤器组中的数字。例如,我想要更改的过滤器是在&#39; CF&#39;这是第84列,但我想改变的过滤器是组中的第64位。
答案 0 :(得分:2)
Dim filterColumn As Integer
filterColumn = 2
ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, _
Criteria1:="<>"
答案 1 :(得分:1)
编辑:我尝试了@ 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