Showalldata vba excel ошибка

Обновлено: 03.07.2024

Я замечаю, что мой VBA script не работает, когда уже установлен автофильтр. Любая идея, почему это?

ОТВЕТЫ

Ответ 1

AutoFilterMode будет True, если он включен, независимо от того, действительно ли фильтр применяется к определенному столбцу или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет выполняться, вызывая ошибку (поскольку фактическая фильтрация отсутствует).

У меня была такая же проблема, и я работал с

Это, по-видимому, предотвращает запуск ShowAllData, когда нет действительного фильтра, но с включенным AutoFilterMode.

Второй улов Or ActiveSheet.FilterMode должен ловить расширенные фильтры

Ответ 2

Простым способом избежать этого является использование метода рабочей таблицы ShowAllData​​p >

Автофильтр имеет тот же метод ShowAllData, который не выдает ошибку, если фильтр включен, но фильтр не установлен.

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

Ответ 3

Ошибка ShowAllData method of Worksheet class failed обычно возникает, когда вы пытаетесь удалить прикладной фильтр, если он не применяется.

Я не уверен, что вы пытаетесь удалить все AutoFilter или просто удалить любой прикладной фильтр, но для каждого из них существуют разные подходы.

Чтобы удалить прикладной фильтр, но оставьте AutoFilter на:

Обоснование вышеуказанного кода состоит в том, чтобы проверить, что существует AutoFilter или применяется фильтр (это также приведет к удалению расширенных фильтров).

Чтобы полностью удалить AutoFilter :

В приведенном выше случае вы просто полностью отключите AutoFilter .

Ответ 4

Я только что испытал ту же проблему. После некоторой пробной ошибки я обнаружил, что если выбор был справа от моей области фильтра. И количество показанных записей было равно нулю, ShowAllData потерпит неудачу.

Возможно, немного больше контекста. У меня есть несколько листов, каждый с фильтром. Я хотел бы установить некоторые стандартные фильтры на всех листах, поэтому я использую некоторые VBA, подобные этому

Этот код будет настраивать фильтр в столбце с заголовком "В выбранном SLA" и оставить все остальные фильтры без изменений. У этого есть неудачный побочный эффект, который я могу создать фильтр, который показывает нулевые записи. Это невозможно, используя только пользовательский интерфейс.

Чтобы избежать этой ситуации, я хотел бы, чтобы reset все фильтры, прежде чем применять фильтрацию выше. Мой код reset выглядел так:

Обратите внимание, что я не перемещал выбранную ячейку. Если выбор был справа, он не удалял фильтры, таким образом, чтобы код фильтра создавал фильтр с нулевой строкой. Во второй раз, когда код запускается (в фильтре с нулевой строкой) ShowAllData завершится с ошибкой.

Обходной путь прост: переместите выделение внутри столбцов фильтра перед вызовом ShowAllData​​p >

Это было в Excel версии 14.0.7128.5000 (32-разрядная версия) = Office 2010

Ответ 5

Это будет работать Определите это, а затем позвоните, когда вам это нужно. (Хорошо для логики кнопок, если вы делаете кнопку очистки):

Я заметил, что мой VBA-скрипт не работает, когда уже включен автофильтр. Есть идеи, почему это так?

AutoFilterMode будет True, если задействован, независимо от того, есть ли фильтр, примененный к конкретному столбцу, или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет запущено, что приведет к ошибке (поскольку нет фактической фильтрации).

У меня была та же проблема, с которой я работал

Похоже, что это препятствует запуску ShowAllData, когда не применен действительный фильтр, но включен AutoFilterMode.

Второй улов Or ActiveSheet.FilterMode должен отлавливать расширенные фильтры

Простой способ избежать этого - не использовать метод листа ShowAllData ​​p>

Автофильтр имеет тот же метод ShowAllData, который не выдает ошибку, когда фильтр включен, но фильтр не установлен

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

Ошибка ShowAllData method of Worksheet class failed обычно возникает, когда вы пытаетесь удалить примененный фильтр, когда он еще не применен.

Я не уверен, пытаетесь ли вы удалить весь AutoFilter или просто удалить какой-либо примененный фильтр, но существуют разные подходы для каждого.

Чтобы удалить примененный фильтр, но оставьте AutoFilter включенным:

Логическое обоснование приведенного выше кода состоит в проверке наличия AutoFilter или применения фильтра (это также приведет к удалению расширенные фильтры).

Чтобы полностью удалить AutoFilter :

В приведенном выше случае вы просто полностью отключаете AutoFilter .

Я только что столкнулся с той же проблемой. После некоторых проб и ошибок я обнаружил, что , если выделение было справа от области моего фильтра И число отображаемых записей было равно нулю, ShowAllData не выполнялся бы .

Немного больше контекста, вероятно, уместно. У меня есть несколько листов, каждый с фильтром. Я хотел бы установить некоторые стандартные фильтры на всех листах, поэтому я использую некоторые VBA, как это

Этот код настроит фильтр для столбца с заголовком «В выбранном SLA» и оставит все остальные фильтры без изменений. Это имеет неприятный побочный эффект, что я могу создать фильтр, который показывает ноль записей. Это невозможно при использовании только пользовательского интерфейса.

Чтобы избежать такой ситуации, я хотел бы сбросить все фильтры, прежде чем применить фильтрацию выше. Мой код сброса выглядел так

Обратите внимание, как я не перемещал выбранную ячейку. Если выбор был справа, он не удалил бы фильтры, таким образом позволяя коду фильтра создать фильтр нулевой строки. Во второй раз, когда код запускается (на фильтре нулевой строки), ShowAllData завершится неудачей.

Обходной путь прост: переместите выделение внутри столбцов фильтра перед вызовом ShowAllData ​​p>

Это было в Excel версии 14.0.7128.5000 (32-разрядная версия) = Office 2010

Я замечаю, что мой VBA script не работает, когда уже установлен автофильтр. Любая идея, почему это?

AutoFilterMode будет True, если он включен, независимо от того, действительно ли фильтр применяется к определенному столбцу или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет выполняться, вызывая ошибку (поскольку фактическая фильтрация отсутствует).

У меня была такая же проблема, и я работал с

Это, по-видимому, предотвращает запуск ShowAllData, когда нет действительного фильтра, но с включенным AutoFilterMode.

Второй улов Or ActiveSheet.FilterMode должен ловить расширенные фильтры

Простым способом избежать этого является использование метода рабочей таблицы ShowAllData​​p >

Автофильтр имеет тот же метод ShowAllData, который не выдает ошибку, если фильтр включен, но фильтр не установлен.

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

Ошибка ShowAllData method of Worksheet class failed обычно возникает, когда вы пытаетесь удалить прикладной фильтр, если он не применяется.

Я не уверен, что вы пытаетесь удалить все AutoFilter или просто удалить любой прикладной фильтр, но для каждого из них существуют разные подходы.

Чтобы удалить прикладной фильтр, но оставьте AutoFilter на:

Обоснование вышеуказанного кода состоит в том, чтобы проверить, что существует AutoFilter или применяется фильтр (это также приведет к удалению расширенных фильтров).

Чтобы полностью удалить AutoFilter :

В приведенном выше случае вы просто полностью отключите AutoFilter .

Я только что испытал ту же проблему. После некоторой пробной ошибки я обнаружил, что если выбор был справа от моей области фильтра. И количество показанных записей было равно нулю, ShowAllData потерпит неудачу.

Возможно, немного больше контекста. У меня есть несколько листов, каждый с фильтром. Я хотел бы установить некоторые стандартные фильтры на всех листах, поэтому я использую некоторые VBA, подобные этому

Этот код будет настраивать фильтр в столбце с заголовком "В выбранном SLA" и оставить все остальные фильтры без изменений. У этого есть неудачный побочный эффект, который я могу создать фильтр, который показывает нулевые записи. Это невозможно, используя только пользовательский интерфейс.

Чтобы избежать этой ситуации, я хотел бы, чтобы reset все фильтры, прежде чем применять фильтрацию выше. Мой код reset выглядел так:

Обратите внимание, что я не перемещал выбранную ячейку. Если выбор был справа, он не удалял фильтры, таким образом, чтобы код фильтра создавал фильтр с нулевой строкой. Во второй раз, когда код запускается (в фильтре с нулевой строкой) ShowAllData завершится с ошибкой.

Обходной путь прост: переместите выделение внутри столбцов фильтра перед вызовом ShowAllData​​p >

Это было в Excel версии 14.0.7128.5000 (32-разрядная версия) = Office 2010

Я замечаю, что мой VBA script не работает, когда уже установлен автофильтр. Любая идея, почему это?

Какую ошибку вы получаете на линии, на которой он падает? Ошибка времени выполнения: сбой метода ShowAllData класса Worksheet

4 ответа

AutoFilterMode будет True, если он включен, независимо от того, действительно ли фильтр применяется к определенному столбцу или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет выполняться, вызывая ошибку (поскольку фактическая фильтрация отсутствует).

У меня была такая же проблема, и я работал с

Это, по-видимому, предотвращает запуск ShowAllData, когда нет действительного фильтра, но с включенным AutoFilterMode.

Второй улов Or ActiveSheet.FilterMode должен ловить расширенные фильтры

Существует логическая проблема: (A и B) или B == B , поэтому ваше решение эквивалентно. , , , , If ActiveSheet.FilterMode Then .

Простым способом избежать этого является использование метода рабочей таблицы ShowAllData​​p >

Автофильтр имеет тот же метод ShowAllData, который не выдает ошибку, если фильтр включен, но фильтр не установлен.

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

Разве Autofilter и ShowAllData разные методы? В то время как Autofilter удаляет фильтр, ShowAllData только очищает его. ОП ссылается на Worksheet.ShowAllData, сообщая об ошибке, когда фильтр включен, но критерии не выбраны, и мой ответ заключается в использовании Worksheet.Autofilter.ShowAllData, который не вызывает ошибку, когда критерии фильтра не выбраны. - Это ShowAllData, это тот же метод, Я не знал этой разницы, и на самом деле это также решило мою текущую проблему после вашего лучшего объяснения, Стивен, большое спасибо! Это решило мою проблему. Я проводил логический тест, упомянутый в ответе с более высоким рейтингом, и все еще сталкивался с ошибкой ОП. Просто проверьте состояние FilterMode. Это решит проблему (по крайней мере, в Excel 2016). Свойство AutoFilterMode возвращает TRUE, когда включен режим Auto Filter Mode, независимо от того, были ли применены критерии фильтрации. Следовательно, тогда критерии не применяются, метод ShowAllData отобразит ошибку.

Ошибка ShowAllData method of Worksheet class failed обычно возникает, когда вы пытаетесь удалить прикладной фильтр, если он не применяется.

Я не уверен, что вы пытаетесь удалить все AutoFilter или просто удалить любой прикладной фильтр, но для каждого из них существуют разные подходы.

Чтобы удалить прикладной фильтр, но оставьте AutoFilter на:

Обоснование вышеуказанного кода состоит в том, чтобы проверить, что существует AutoFilter или применяется фильтр (это также приведет к удалению расширенных фильтров).

Чтобы полностью удалить AutoFilter :

В приведенном выше случае вы просто полностью отключите AutoFilter .

Я обновил свой код до следующего: Если ActiveSheet.AutoFilterMode, то ActiveSheet.AutoFilterMode = False, если ActiveSheet.FilterMode, то ActiveSheet.FilterMode = False. Я хочу полностью удалить фильтры. Однако теперь я заметил, что метод вставки также вставляет в первые (невидимые?) Три ячейки. Я не могу этого понять. @KrisVandenBergh Я рад, что первоначальная проблема решена :) Если есть другая проблема с вашим методом PasteSpecial возможно, стоит поднять новый вопрос, так как этот должен был выяснить ошибку с AutoFilter . @KrisVandenBergh Как ваша первоначальная проблема была решена, вы могли бы пометить этот вопрос как ответ? Спасибо @KrisVandenBergh Можете ли вы одобрить этот вопрос как ответили, пожалуйста. Это все еще кажется без ответа. Кстати @MartinParkin, я сталкиваюсь с почти такой же проблемой, но даже If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If не помогает мне. И что интересно, иногда я получаю эту ошибку, иногда не знаю, почему это происходит. Есть идеи?

Я только что испытал ту же проблему. После некоторой пробной ошибки я обнаружил, что если выбор был справа от моей области фильтра. И количество показанных записей было равно нулю, ShowAllData потерпит неудачу.

Возможно, немного больше контекста. У меня есть несколько листов, каждый с фильтром. Я хотел бы установить некоторые стандартные фильтры на всех листах, поэтому я использую некоторые VBA, подобные этому

Этот код будет настраивать фильтр в столбце с заголовком "В выбранном SLA" и оставить все остальные фильтры без изменений. У этого есть неудачный побочный эффект, который я могу создать фильтр, который показывает нулевые записи. Это невозможно, используя только пользовательский интерфейс.

Чтобы избежать этой ситуации, я хотел бы, чтобы reset все фильтры, прежде чем применять фильтрацию выше. Мой код reset выглядел так:

Обратите внимание, что я не перемещал выбранную ячейку. Если выбор был справа, он не удалял фильтры, таким образом, чтобы код фильтра создавал фильтр с нулевой строкой. Во второй раз, когда код запускается (в фильтре с нулевой строкой) ShowAllData завершится с ошибкой.

Обходной путь прост: переместите выделение внутри столбцов фильтра перед вызовом ShowAllData​​p >

Это было в Excel версии 14.0.7128.5000 (32-разрядная версия) = Office 2010

Итог: узнайте, как очистить все фильтры и фильтры в одном столбце с помощью макросов VBA. Включает примеры кода для регулярных диапазонов и таблиц Excel.

Уровень мастерства: Средний

VBA Code to Clear Filters in Excel

Файл Excel, содержащий код, можно скачать ниже. Этот файл содержит код для фильтрации различных типов данных и типов фильтров. Пожалуйста, ознакомьтесь с моей статьей Фильтрация сводной таблицы или среза по самой последней дате или периоду для более подробной информации.

VBA AutoFilters Guide.xlsm (100.5 KB)

Очистить все фильтры из диапазона

Мы используем метод ShowAllData, чтобы очистить все фильтры, примененные к диапазону.

Это аналогично нажатию кнопки «Очистить» на вкладке «Данные» на ленте (сочетание клавиш: Alt, A, C)

Clear All Filters on Sheet or Table with ShowAllData Method in VBA

К рабочему листу может быть применен только один диапазон фильтров, поэтому мы на самом деле очищаем фильтры на листе.

Ошибка метода ShowAllData

VBA Clear Filters Error Method ShowAllData of Object Worksheet failed

Следующая строка On Error Resume Next будет игнорировать эту ошибку. При ошибке GoTo 0 сбрасывается, поэтому ошибки возникают в любых строках кода ниже.

Примечание. Когда метод ShowAllData упоминается как элемент листа, он НЕ очищает фильтры, которые применяются к таблицам Excel (ListObjects), если в таблице не выбрана ячейка. Поэтому лучше всего использовать приведенный ниже код для таблиц.

Очистить все фильтры из таблицы Excel

Чтобы очистить все фильтры таблицы Excel (ListObject), мы также используем метод ShowAllData. В этом случае ShowAllData является членом свойства AutoFilter объекта ListObject.

Очистить все фильтры во всех таблицах на листе

Приведенный выше код удаляет фильтры только для одной таблицы. Мы можем просмотреть таблицы на листе, чтобы удалить все фильтры из каждой таблицы.

Очистить фильтры в одной колонке

Чтобы очистить фильтры для одного столбца, мы используем метод AutoFilter. Мы ссылаемся только на параметр Field и устанавливаем значение для номера столбца, который мы хотим очистить.

Clear Filter on Single Column VBA AutoFilter Method Field Only

Field Parameter Value is Column Number of the Range or Table

Тот же метод используется для очистки фильтров, примененных к столбцу в таблице. В этом случае метод AutoFilter является членом объекта Range объекта ListObject.

Фильтры и типы данных

Параметры раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце. У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО различных комбинаций операторов и критериев для каждого типа фильтра.

Я создал отдельные статьи для каждого из этих типов фильтров. Статьи содержат пояснения и примеры кода VBA.

  • Как фильтровать числа с помощью VBA
  • Как отфильтровать пустые и непустые ячейки
  • Как фильтровать текст с помощью VBA
  • Как отфильтровать даты по VBA
  • Как отфильтровать цвета и значки с помощью VBA

Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.

Пожалуйста, оставьте комментарий ниже с любыми вопросами или предложениями. Спасибо!

Читайте также: