Excel VBA - 使用数组作为自动筛选条件,而不是预期结果

Excel VBA - Use array as criteria in autofilter, not expected results

此过程的最终目标是删除 "TestData" table 中具有 "SysAccts" table 中列出的用户的所有行(在"Lists" 工作表)。

我正在使用自动筛选器查找这些行,因此我可以 select 并删除它们。

这是我的代码:

Sub ClearSystemAccts()
    Dim wksData As Worksheet
    Dim objDataTable As ListObject
    Dim varSysAccts As Variant

    Set wksData = ActiveWorkbook.Sheets("Test Data")
    Set objDataTable = wksData.ListObjects("TestData")
    varSysAccts = Worksheets("Lists").Range("SystemAccts")

    With objDataTable.Range
        'turn off the autofilters as a reset
        .AutoFilter
        'set the autofilter with the criteria;
        .AutoFilter field:=2, Criteria1:=varSysAccts, Operator:=xlFilterValues
        'Delete the entire row for the visible cells; _
        'skips the header but also deletes the blank row below the table.
        .CurrentRegion.Offset(1).EntireRow.Delete
        'turn off autofilter
        .AutoFilter
    End With

End Sub

当我 运行 代码时,自动过滤器在 table 中不显示任何行。

我已验证 varSysAccts 变量已正确填充。

当我将鼠标悬停在自动筛选行中的条件上时,我得到以下信息:

我觉得问题是当一个table读入一个数组时,它总是一个动态数组。但是 table 只是一列。我该如何解决?

已编辑:根据下面的评论,我从条件中删除了数组。现在我没有得到类型不匹配,但过滤器仍然没有 select 任何行。

假设 SystemAccts 是一个列,使用

varSysAccts = Application.Transpose(Worksheets("Lists").Range("SystemAccts‌​")) 

这将使数组 one-dimensional,而不是 two-dimensional(行 x 列)。

然后,因为你已经有了一个数组,你只需要使用Criteria1:=varSysAccts而不是Criteria1:=Array(varSysAccts)