首页 > 解决方案 > 自动筛选代码的参数不是可选错误

问题描述

我对VBA不是很精通。我正在尝试创建一个宏,将活动工作表的表格过滤为 0 和“N/A”。运行宏时,我收到错误“Argument Not Optional”并返回到 ws.Range 行。

我查看了其他代码,但我不确定我到底做错了什么。

Sub Remove_Cleared()
'
' Remove_Rows_Based_On_Value
'

'
Dim ws As Worksheet
Dim activeTable As String

    activeTable = ActiveSheet.ListObjects(1).Name

    MsgBox activeTable 'Make sure pulling correct table

    'Set reference to the sheet in the workbook
    Set ws = ActiveSheet
    ws.Activate 'not required but allows user to view sheet if warning message

    'clear any existing filters
    On Error Resume Next
        ws.ShowAllData
    On Error GoTo 0

    '1 Apply Filter
    ws.Range.AutoFilter Field:=8, Criteria1:="0", Operator:=xlOr, Criteria2:="N/A"

    '2 Delete Rows
    Application.DisplayAlerts = False
        ws.Range(activeTable).SpecialCells(xlCellTypeVisible).Delete
    Application.DisplayAlerts = True

    '3 Clear Filter
    On Error Resume Next
        ws.ShowAllData
    On Error GoTo 0

End Sub

在宏结束时,我希望从活动工作表的表中删除任何包含 0 或 N/A 值的行。

标签: excelvbaautofilter

解决方案


ws.Range("A1:M300")...Range对象需要一个范围。

由于您已经获得了该表的名称,因此可以将其用作参数:

ws.Range(activeTable).AutoFilter Field:=8, Criteria1:="0", Operator:=xlOr, Criteria2:="N/A"

推荐阅读