此过程的最终目标是删除“TestData”表中具有“SysAccts”表(在“列表”工作表)中列出的用户的所有行。
我正在使用自动过滤来查找这些行,以便我可以选择它们并删除它们。
这是我的代码:
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变量已正确填充。
我认为问题是当一个表被读入一个数组时,它总是一个动态数组。但该表只有一列。我该如何解决?
已编辑:根据以下评论,我从条件中删除了数组。现在我没有得到类型不匹配,但过滤器仍然没有选择任何行。
答案 0 :(得分:3)
假设SystemAccts是一列,请使用
varSysAccts = Application.Transpose(Worksheets("Lists").Range("SystemAccts"))
这将使数组成为一维的,而不是二维的(行x列)。
然后,因为您已有数组,所以只需使用Criteria1:=varSysAccts
代替Criteria1:=Array(varSysAccts)
。