VBA удаляет несколько строк после того, как AutoFilter одновременно использует xlCellTypeVisible, бросает ошибку

У меня есть AutoFilter на таблице, которая правильно фильтрует таблицу, где столбец не равен строковому значению. Затем я хочу удалить все видимые строки, которые остались нефильтрованными (может быть, от 1000 до 2000 строк сразу max). Однако я получаю сообщение об ошибке в методе EntireRow.Delete . Вот мой код, как я могу успешно удалить эти строки сразу?

 Dim columnFilter As String columnFilter = "Foo" Set tbl = ActiveCell.CurrentRegion tbl.AutoFilter tbl.AutoFilter Field:=columnNum, Criteria1:="<>" & columnFilter '***Error thrown here tbl.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

Приведенная ошибка: Run-time error '1004': Delete method of Range class failed.

Не используйте. Используйте это. Придерживайтесь свойства Range.CurrentRegion вместо этого и смещайте, чтобы сохранить заголовок.

Также существует предостережение, связанное с удалением видимых строк, видимых после применения метода AutoFilter . Вы всегда должны проверять, чтобы по крайней мере одна строка оставалась видимой после того, как критерии были применены до операции удаления. Существует несколько способов сделать это; это та, которая связана с возможностью использования встроенной рабочей таблицы SUBTOTAL функцией исключения невидимых строк из ее вычислений.

Другая проблема заключается в запутывании структурированного объекта List List List с регулярными данными листа. Структурная таблица требует особого рассмотрения. Я добавил код в подпрограмму ниже, чтобы проверить, что отфильтрованная область является таблицей ListObject, и решить между двумя способами удаления строк на основе этого определения.

 Sub fooFilter() Dim columnFilter As String, columnNum As Long columnFilter = "Foo" columnNum = 1 With Sheets("Sheet1") If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, 1).CurrentRegion .AutoFilter Field:=columnNum, Criteria1:="<>" & columnFilter With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) If CBool(Application.Subtotal(103, .Columns(columnNum))) Then 'very simple test to see if we are in a ListObject or not If .ListObject Is Nothing Then .SpecialCells(xlCellTypeVisible).EntireRow.Delete Else .EntireRow.Delete End If End If End With 'leave filter there but clear the filter .AutoFilter Field:=columnNum End With End With End Sub 

Если вы пытаетесь удалить весь путь до нижней части рабочего листа¹, вы должны получить

 Run-time error: '1004' Application-defined or object-defined error 

Вышеприведенная ошибка не имеет ничего общего с ограничениями на количество строк, которые вы можете удалить. Проблема заключается в том, что вы пытаетесь использовать свойство Range.Offset, прежде чем изменять размер связанного диапазона. Без изменения размера вы пытаетесь вывести диапазон с листа на количество строк в .Offset. . Сначала отредактируйте в одну строку, а затем смещайте, чтобы сохранить заголовок.

Существует некоторая волатильность свойства .UsedRange, и я использую его все меньше и меньше для чего-либо вообще.

В этой статье есть статья MS KB о проблеме с попыткой удалить строки, которые пока не отображаются. См. Удаление или изменение строк, которые находятся выше и ниже скрытой строки в отфильтрованном листе Excel 2007, также удаляет или изменяет скрытую строку для деталей.

¹Для того, что лист, законно заполненный до последней строки, очень редок. Гораздо более вероятно, что рабочий лист демонстрирует ложное свойство xlCellTypeLastCell из-за значения изгоя или более ревностного форматирования. Корректировка рабочего листа для правильного отражения экстентов фактических данных должна произойти до настройки кодирования, чтобы компенсировать проблему с рабочим листом.

  • Найдите первую видимую ячейку ниже и получите ссылку
  • Autofilter Macro, используемый для определения значения в диапазоне данных - как отображать сообщение об ошибке, если данные не найдены
  • Как я прохожу через Autofilter, используя VBA в excel?
  • Добавление поиска фильтра даты в текущую линию автообновления VBA
  • Фильтрация фиксированного количества данных с помощью AutoFilter
  • Программно обновлять автофильтр перед экспортом PDF
  • метод автофильтров класса диапазона не выполнен
  • Неисправность класса класса на автофильтре
  • Автофильтр, затем xlcelltypevisible выбирает пустые строки
  • Множественные критерии фильтра для пробелов и чисел с использованием подстановочных знаков на одном поле просто не работают
  • Запустите макрос после выполнения фильтра в VBA (Excel)
  • Давайте будем гением компьютера.