0

我有一个数据表,第一行是过滤器,我有一个循环,它改变循环内需要使用的过滤器是变量 filterColumn,每次循环运行时都被分配一个新值。

当我尝试使用 filterColumn 来确定将“打开”哪个过滤器时出现错误

范围类的自动过滤方法失败

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

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

问题已解决我找到了解决方案。我在整个工作表方面引用了过滤器列的位置,而实际上我应该引用它在过滤器组中的编号。例如,我想要更改的过滤器位于第 84 列的“CF”中,但我想要更改的过滤器是组中的第 64 列。

4

2 回答 2

2
Dim filterColumn As Integer
filterColumn = 2
ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, _
    Criteria1:="<>"
于 2012-08-16T04:56:14.867 回答
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
于 2012-08-16T05:26:50.933 回答