首页 > 解决方案 > VBA 设置自动筛选和筛选选定列

问题描述

我正在尝试将自动筛选应用于所有数据,然后在 C 列中过滤掉除“空白”之外的所有单元格。它为第一行选择工作表上的所有数据,但随后给我一个运行时错误 - '未找到命名参数'。

Selection.CurrentRegion.Select

ActiveSheet.AutoFilter Field:=3, Criteria1:="blanks"

我希望自动过滤和过滤列 C 的工作表只显示空白。

标签: excelvbaautofilter

解决方案


隐式后期绑定再次来袭!ActiveSheetis an Object, not a Worksheet- 您直接针对它进行的任何成员调用,本质上都是后期绑定的。也就是说,它们只能在运行时解析,并且在编写代码时您可以获得零编译器或 IDE 帮助。

如果你声明了一个Worksheet对象:

Dim ws As Worksheet

...并将其分配给ActiveSheet

Set ws = ActiveSheet

...然后尝试调用其AutoFilter属性

ws.AutoFilter 

...您很快就会注意到有些东西是关闭的:Worksheet.AutoFilter不是方法,而是属性Nothing如果过滤关闭)。你的意思是使用方法Range.AutoFilter

使用Selection将起作用,但与使用ActiveSheet.

使用 aRange代替 -CurrentRegion恰好就是这样!

ws.Range("A1").CurrentRegion.AutoFilter

现在,当您Space在该成员调用之后键入时,您将获得参数快速信息,向您显示参数是什么 - 请注意FieldCriteroa1分别是成员签名中的第一个和第二个参数 - 这意味着命名参数实际上是多余的 /参数名和:=操作符可以省略,传值正常:

是的智能感知!

ws.Range("A1").CurrentRegion.AutoFilter 3, "blanks"
ws.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:="blanks" '<~ exactly equivalent to the above

推荐阅读