此过程的最终目标是删除“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 变量是否已正确填充。
我认为问题在于,当将表读入数组时,它始终是动态数组。但该表只有一列。我该如何解决?
已编辑:根据下面的评论,我从条件中删除了该数组。现在我没有发现类型不匹配,但过滤器仍然没有选择任何行。
最佳答案
假设SystemAccts是一列,使用
varSysAccts = Application.Transpose(Worksheets("Lists").Range("SystemAccts"))
这将使数组成为一维数组,而不是二维数组(行 x 列)。
然后,由于您已经有一个数组,因此只需使用 Criteria1:=varSysAccts
而不是 Criteria1:=Array(varSysAccts)
。
关于arrays - Excel VBA - 使用数组作为自动筛选条件,而不是预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768007/