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

标签 arrays excel named-ranges vba

此过程的最终目标是删除“TestData”表中包含“SysAccts”表(在“Lists”工作表上)中列出的用户的所有行。

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

这是我的代码:

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

当我运行代码时,自动筛选器在表中不显示任何行。

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

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

我认为问题在于,当将表读入数组时,它始终是动态数组。但该表只有一列。我该如何解决?

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

最佳答案

假设SystemAccts是一列,使用

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

这将使数组成为一维数组,而不是二维数组(行 x 列)。

然后,由于您已经有一个数组,因此只需使用 Criteria1:=varSysAccts 而不是 Criteria1:=Array(varSysAccts)

关于arrays - Excel VBA - 使用数组作为自动筛选条件,而不是预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768007/

相关文章:

vba - 你能中断vba代码来选择工作表吗?

C - 初始化指针数组

Java,在声明需要宽度和高度的静态数组时遇到问题,直到我已经在函数中时才设置变量

arrays - 忽略 Excel 数组公式中的空白参数

excel - 如何引用 Excel 命名范围内的单元格?

c# - 更改命名范围 EPPlus

excel - 为什么 FIND 对结构化表不返回任何内容?

c - C 中的静态数组

javascript - JS map 返回对象

excel - 如何私下分发 excel office 插件(w/office.js)?