Я пытаюсь выяснить, почему метод VBA ListRow.Delete
работает по-разному, когда моя таблица фильтруется, а когда нет.
У меня есть таблица с адресами электронной почты, и ястолбец с именем AutoCheck
с формулой, которая проверяет, соответствует ли адрес моим критериям достоверности.У меня также есть макрос (привязанный к некоторым кнопкам), который удаляет все строки таблицы со значением AutoCheck
в False
:
Sub FixErrors()
Dim tbl As ListObject
Dim x As Long
Set tbl = ActiveSheet.ListObjects("Kontakty")
For x = tbl.ListRows.Count To 1 Step -1
If tbl.ListRows(x).Range.Columns(tbl.ListColumns("AutoCheck").Index) = False Then
tbl.ListRows(x).Delete
End If
Next x
End Sub
. Это работает как шарм, когда у меня есть целоетаблица отображается, но когда я применяю фильтр и отображаю только некоторые записи (независимо от того, отфильтрованы ли поврежденные строки или нет), макрос внезапно перестает работать!Я попробовал отладку и остался совершенно сбит с толку.Я установил точку останова в строке tbl.ListRows(x).Delete
, и она правильно идентифицирует строку, вызвавшую сбой (часы для tbl.ListRows(x).Range.Columns(tbl.ListColumns("Email").Index)
отображают правильную электронную почту, которую мне нужно удалить), но tbl.ListRows(x).Delete
просто ничего не делает, я шагаючерез это и ничего не меняется!
Я уверен, что здесь что-то упущено, я был бы признателен за любую помощь.