Конечная цель этой процедуры — удалить все строки в таблице «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"))
(чтобы сделать массив одномерным), а затемCriteria1:=varSysAccts
. - person YowE3K   schedule 20.01.2017