VBA 设置自动筛选并筛选选定的列

VBA to set AutoFilter and filter selected columns

我正在尝试将自动筛选应用于所有数据,然后筛选出 C 列中除“空白”之外的所有单元格。它选择工作中的所有数据sheet 作为第一行,然后给我一个运行-时间错误-'Named argument not found'.

Selection.CurrentRegion.Select

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

我希望 sheet 自动筛选并筛选 C 列以仅显示空白。

隐式后期绑定再次来袭! ActiveSheetObject,而不是 Worksheet - 您直接针对它进行的任何成员调用本质上都是延迟绑定的。也就是说,它们只能在 运行 时解决,并且您在编写代码时得到零编译器或 IDE 帮助。

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

Dim ws As Worksheet

...并将其分配给 ActiveSheet:

Set ws = ActiveSheet

...然后尝试调用其 AutoFilter property:

ws.AutoFilter 

...您很快就会发现有什么不对:Worksheet.AutoFilter 不是 方法 ,而是 属性 (如果过滤关闭则为 Nothing)。您的意思是使用 Range.AutoFilter 方法 .

使用 Selection 可以工作,但与使用 ActiveSheet 一样晚绑定。

改为使用 Range - 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
Rows("1:1").AutoFilter field:=3, Criteria1:=""