Excelmacros自动过滤问题与variables

我有一个数据表的顶部行是filter,我有一个循环,改变哪些filter需要在循环内部使用的variablesfilterColumn是每次循环运行时分配一个新的值。

当我尝试使用filterColumn来确定哪个filter将“打开”我得到一个错误

范围类的自动筛选方法失败

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

什么是正确的语法,以便使用一个variables来确定filter在哪个字段?

解决问题我find了解决scheme。 我是在整个工作表中引用filter列的位置,实际上我应该引用filter组中的数字。 例如,我想改变的filter是在第84列的“CF”中,但是我想改变的filter是组中的第64个filter。

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

编辑 :我试了@ HeadofCatering的解决scheme,最初失败了。 然而,我填写了引用列中的值,它的工作(我的解决scheme也失败了反向条件 – 使列标题空白,失败)。

然而,这并不完全符合我所看到的(也许你已经) – 你可以肯定地添加filter到空白标题的列。 然而有一件事情在我看到的失败中是一致的 – filterColumn引用了Application.UsedRange之外的列。 您可能想要尝试validation您所引用的列实际上是否在Application.UsedRange (简单的方法:在立即窗口中运行Application.UsedRange.Select并查看您的列是否被选中)。 由于引用了相当数量的列,所以有可能没有超过特定点(包括列标题)的值,并且当指定要过滤的列时,实际上是在UsedRange之外指定某些UsedRange

一个有趣的(这对我来说也是新的)要testing的东西是一张白纸,在单元格A1B1填充值,select列A:G并手动添加自动filter – 这只会将filter添加到列A和B如果您尝试将滤镜添加到完全空白的图纸,可以find相关的情况)。

抱歉的喋喋不休 – 这是甚至没有你的问题:)


旧解决scheme(使用上述条件时不起作用)

我可能会过度使用它,但也尝试设置表单值(注意我在这里使用了一个范围):

 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