带有变量的Excel宏自动过滤器问题

时间:2012-08-16 04:40:27

标签: excel vba excel-vba

我有一个数据表,其中顶行是过滤器,我有一个循环,可以更改需要在循环内使用哪个过滤器的变量filterColumn,每次循环运行时都会为其分配一个新值。 / p>

当我尝试使用filterColumn来确定哪个过滤器将被打开'我收到错误

  

Range Class Failed的自动过滤方法

ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, Criteria1:="<>"

使用变量确定过滤器所在的字段的正确语法是什么?

解决了问题我找到了解决方案。我在整个工作表方面引用了过滤器列位置,实际上我应该引用它在过滤器组中的数字。例如,我想要更改的过滤器是在&#39; CF&#39;这是第84列,但我想改变的过滤器是组中的第64位。

2 个答案:

答案 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之外的内容

一个有趣的(这对我来说也是新的)测试的东西是取一张空白表,填写单元格A1B1中的值,选择列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