Showalldata vba excel ошибка
Я замечаю, что мой VBA script не работает, когда уже установлен автофильтр. Любая идея, почему это?
ОТВЕТЫ
Ответ 1
AutoFilterMode будет True, если он включен, независимо от того, действительно ли фильтр применяется к определенному столбцу или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет выполняться, вызывая ошибку (поскольку фактическая фильтрация отсутствует).
У меня была такая же проблема, и я работал с
Это, по-видимому, предотвращает запуск ShowAllData, когда нет действительного фильтра, но с включенным AutoFilterMode.
Второй улов Or ActiveSheet.FilterMode должен ловить расширенные фильтры
Ответ 2
Простым способом избежать этого является использование метода рабочей таблицы ShowAllDatap >
Автофильтр имеет тот же метод 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 завершится с ошибкой.
Обходной путь прост: переместите выделение внутри столбцов фильтра перед вызовом ShowAllDatap >
Это было в Excel версии 14.0.7128.5000 (32-разрядная версия) = Office 2010
Ответ 5
Это будет работать Определите это, а затем позвоните, когда вам это нужно. (Хорошо для логики кнопок, если вы делаете кнопку очистки):
Ответ 6
У меня тоже такая же проблема. Я думаю, что причина в том,
1) Когда моя активная ячейка находится внутри таблицы, "ActiveSheet.ShowAllData" может работать. 2) Когда моя активная ячейка не в таблице, "ActiveSheet.ShowAllData" не может работать. Используя этот код, ActiveSheet.ListObjects("Srv"). Range.AutoFilter Field: = 1 может очистить фильтр.
Я заметил, что мой 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
У меня тоже такая же проблема. Я думаю, что причина в том,
1) Когда моя активная ячейка находится в таблице, «ActiveSheet.ShowAllData» может работать. 2) Когда моя активная ячейка не в таблице, «ActiveSheet.ShowAllData» не может работать. Используя этот код, ActiveSheet.ListObjects («Srv»). Range.AutoFilter Field: = 1 может очистить фильтр.
Похожие вопросы
Популярные теги
Кажется, старые макросы не работают. У меня есть правильный набор безопасности для запуска макросов VBA, но когда я попробовал несколько методов для очистки ВСЕХ фильтров на листе, я получаю ошибку компиляции.
Вот что я пробовал:
У меня есть кнопки на листах, чтобы очистить все фильтры для простоты использования для пользователей, поскольку на листах есть много столбцов с фильтрами.
23 ответа
Если на листе уже есть фильтр, то:
ShowAllData выдаст ошибку, если фильтр в данный момент не применяется. Это будет работать:
Для таблиц попробуйте это, чтобы проверить, включен ли он и выключен:
Чтобы снова включить:
это хорошо работает.!
Я нашел, что этот обходной путь работает довольно эффективно. Он в основном удаляет автофильтр из таблицы, а затем повторно применяет его, удаляя все предыдущие фильтры. По моему опыту, это не склонно к обработке ошибок, которая требуется для других методов, упомянутых здесь.
Это великолепно, единственный ответ, который я нашел, который удовлетворял мою особую потребность, большое спасибо за то, что подняли его!
Я сделал небольшое дополнение, чтобы экран не мигал, и он удаляет, а затем повторно применяет пароль на каждом листе при циклическом переходе [У меня один и тот же пароль для всех листов в книге]. В духе вашего представления я добавляю это, чтобы помочь кому-то еще .
Я знаю, что это относительно старая статья, и мне не очень нравится быть некромантом . Но, поскольку у меня возникла та же проблема, и я безуспешно попробовал несколько вариантов в этой теме, я объединил некоторые ответы рабочий макрос ..
Надеюсь, это поможет кому-то там:)
Я обычно использую этот код
Это тоже будет работать:
Сначала проверяется, установлен ли AutoFilterMode (возможна ли фильтрация), затем проверяется, включен ли FilterMode (выполняется ли фильтрация по чему-либо), затем отключается фильтрация.
Относительно ошибок, то есть защиты - другие ответы
Контекст добавлен (мой скрипт зацикливается на листах, которые затем сохраняются как CSV, поэтому необходимо удалить фильтры - но оставьте AutoFilterMode включенным, если он установлен:
В Excel есть два типа фильтров:
Функция автоматического фильтра позволяет фильтровать из интерфейса Excel с помощью этих крошечных выпадающих кнопок. А функция расширенного фильтра позволяет фильтровать с использованием диапазона критериев.
Метод ShowAll удаляет фильтры, как, например, показывает все строки, но не избавляется от этих выпадающих кнопок. Чтобы удалить эти кнопки, необходимо установить для свойства AutoFilterMode рабочего листа значение FALSE.
Вот Sub, который я часто использую для удаления фильтров:
Показывает все данные и удаляет выпадающие кнопки. Это удобно при укладке (копировании и вставке) данных из нескольких листов или рабочих книг. Надеюсь, это поможет.
Попробуйте что-то вроде этого:
.FilterMode возвращает значение true, если лист находится в режиме фильтра. ( Подробнее см. .)
См. это для получения дополнительной информации о .AutoFilter
. И, наконец, этот предоставит дополнительную информацию о .ShowAllData метод.
Вот одна строчка, которую я использую. Он проверяет автофильтр и, если он найден, удаляет его.
Просто активируйте заголовки фильтра и запустите showalldata, работает на 100%. Что-то вроде:
Если у вас есть заголовки полей в A1: Z1 и R1: Y1 соответственно.
Я использую .filtermode , если фильтр включен, возвращает true
Этот код очищает все фильтры и удаляет сортировку.
Вот код для исправления фильтров. Например, если вы включаете фильтры на листе, а затем добавляете столбец, тогда вы хотите, чтобы новый столбец также был покрыт фильтром.
Мы можем передать конкретный лист этому макросу, который будет фильтровать только этот лист. Полезно, если вам нужно убедиться, что только один рабочий лист понятен. Тем не менее, я обычно хочу сделать всю книгу
Вы можете использовать это, например, открыв рабочую книгу, с которой вам нужно разобраться, и сбросив их фильтры, прежде чем что-либо делать с этим:
Тот, который я использую чаще всего: Сброс всех фильтров в книге, в которой хранится модуль:
Все, что вам нужно, это:
Почему? Как и лист, AutoFilter также имеет метод ShowAllData, но он не выдает ошибку, даже если автофильтр включен без активного фильтра.
Это будет сброшено только в том случае, если у вас есть фильтр, и не вызывает никаких ошибок, когда нет фильтра. Если ActiveSheet.AutoFilterMode, то ActiveSheet.Columns ("A"). Автофильтр
Это работает лучше всего для меня.
Я обычно использую следующее перед сохранением и закрытием файлов.
Он использует AutoFilterMode в качестве логического значения.
Прежде чем использовать ActiveSheet.ShowAllData
, необходимо сначала выбрать диапазон таблицы.
Похожие вопросы
Популярные теги
I notice my VBA script doesn't work when there's an autofilter already on. Any idea why this is?
7 Answers 7
AutoFilterMode will be True if engaged, regardless of whether there is actually a filter applied to a specific column or not. When this happens, ActiveSheet.ShowAllData will still run, throwing an error (because there is no actual filtering).
I had the same issue and got it working with
This seems to prevent ShowAllData from running when there is no actual filter applied but with AutoFilterMode turned on.
The second catch Or ActiveSheet.FilterMode should catch advanced filters
There is a logical problem: (A and B) or B == B, therefore your solution is equivalent to . . . . . If ActiveSheet.FilterMode Then .
The simple way to avoid this is not to use the worksheet method ShowAllData
Autofilter has the same ShowAllData method which doesn't throw an error when the filter is enabled but no filter is set
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData
Aren't Autofilter and ShowAllData different methods? While Autofilter removes filter, ShowAllData only clears it.
The OP is referring to Worksheet.ShowAllData giving an error when the filter is on but no criteria is selected and my answer is to use Worksheet.Autofilter.ShowAllData which doesn't cause an error when no filter criteria is selected. - It's ShowAllData that's the same method,
I didn't know that difference and actually that also solved my current problem after your better explanation Steven, thanks a lot!
This solved my issue. I was doing the logical test mentioned in the higher-ranked answer and still encountering OP's error.
Just check for the FilterMode condition. That will solve the problem (at least it did in Excel 2016). The AutoFilterMode property returns TRUE when the Auto Filter Mode is on, irrespective of whether filter criteria were applied. Consequently, then no criteria are applied, the ShowAllData method will display an error.
The error ShowAllData method of Worksheet class failed usually occurs when you try to remove an applied filter when there is not one applied.
I am not certain if you are trying to remove the whole AutoFilter , or just remove any applied filter, but there are different approaches for each.
To remove an applied filter but leave AutoFilter on:
The rationale behind the above code is to test that there is an AutoFilter or whether a filter has been applied (this will also remove advanced filters).
To completely remove the AutoFilter :
In the above case, you are simply disabling the AutoFilter completely.
I have updated my code to the following: If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False If ActiveSheet.FilterMode Then ActiveSheet.FilterMode = False I want to completely remove the filters. However, I now notice the paste method also pastes into the first (invisible?) three cells. I'm not able to understand this.
@KrisVandenBergh I'm glad the initial problem is solved :) If there is another problem with your PasteSpecial method it might be worth raising a new question for it as this one was to figure out the error with the AutoFilter .
@KrisVandenBergh As your original problem has been solved, could you mark this question as answered? Thanks
Btw @MartinParkin, I'm facing with almost same issue but even If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If doesn't help me. And interestingly sometimes I get this error , sometimes not I don't know why that's happening. Any ideas?
I have just experienced the same problem. After some trial-and-error I discovered that if the selection was to the right of my filter area AND the number of shown records was zero, ShowAllData would fail.
A little more context is probably relevant. I have a number of sheets, each with a filter. I would like to set up some standard filters on all sheets, therefore I use some VBA like this
This code will adjust the filter on the column with heading "In Selected SLA", and leave all other filters unchanged. This has the unfortunate side effect that I can create a filter that shows zero records. This is not possible using the UI alone.
To avoid that situation, I would like to reset all filters before I apply the filtering above. My reset code looked like this
Note how I did not move the selected cell. If the selection was to the right, it would not remove filters, thus letting the filter code build a zero-row filter. The second time the code is run (on a zero-row filter) ShowAllData will fail.
The workaround is simple: Move the selection inside the filter columns before calling ShowAllData
Я заметил, что мой сценарий VBA не работает, когда уже включен автофильтр. Любая идея, почему это?
AutoFilterMode будет иметь значение True, если он задействован, независимо от того, применяется ли на самом деле фильтр к определенному столбцу или нет. Когда это произойдет, ActiveSheet.ShowAllData все равно будет работать, выдавая ошибку (потому что нет фактической фильтрации).
У меня была такая же проблема, и она работала с
Кажется, это предотвращает запуск ShowAllData, когда фактический фильтр не применяется, но с включенным AutoFilterMode.
Второй улов Or ActiveSheet.FilterMode должен ловить расширенные фильтры
Есть логическая проблема: (A и B) или B == B , поэтому ваше решение эквивалентно . . . . . If ActiveSheet.FilterMode Then .
Простой способ избежать этого — не использовать метод рабочего листа ShowAllData.
Автофильтр имеет тот же метод ShowAllData, который не выдает ошибку, когда фильтр включен, но фильтр не установлен.
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData
Не является Autofilter и ShowAllData различными методами? Пока Autofilter удаляет фильтр, ShowAllData только очищает его.
OP ссылается на Worksheet.ShowAllData, выдающую ошибку, когда фильтр включен, но критерии не выбраны, и мой ответ заключается в использовании Worksheet.Autofilter.ShowAllData, который не вызывает ошибку, когда критерии фильтра не выбраны. - Это тот же метод ShowAllData,
Я не знал этой разницы, и на самом деле это также решило мою текущую проблему после вашего лучшего объяснения, Стивен, большое спасибо!
Это решило мою проблему. Я выполнял логический тест, упомянутый в ответе с более высоким рейтингом, и все еще сталкивался с ошибкой ОП.
Просто проверьте условие FilterMode. Это решит проблему (по крайней мере, в Excel 2016). Свойство AutoFilterMode возвращает TRUE, когда включен режим автоматической фильтрации, независимо от того, были ли применены критерии фильтрации. Следовательно, если критерии не применяются, метод 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» и оставит все остальные фильтры без изменений. У этого есть неприятный побочный эффект: я могу создать фильтр, который показывает нулевые записи. Это невозможно, используя только пользовательский интерфейс.
Чтобы избежать этой ситуации, я хотел бы сбросить все фильтры, прежде чем применять фильтрацию выше. Мой код сброса выглядел так
Обратите внимание, как я не перемещал выбранную ячейку. Если бы выбор был справа, он не удалил бы фильтры, что позволило бы коду фильтра построить фильтр с нулевой строкой. При втором запуске кода (для фильтра с нулевой строкой) ShowAllData завершится ошибкой.
Обходной путь прост: перед вызовом ShowAllData переместите выделение в столбцы фильтра.
Это было в версии Excel 14.0.7128.5000 (32-разрядная версия) = Office 2010.
Читайте также: