D07 Пользователь Сообщений: 60 |
Добрый день. — ActiveSheet.ShowAllData Я так понимаю, что нужно добавить что то, чтобы при нажатии на кнопку при отсутствии фильтров, он просто вхолостую щелкал и все. Но я в этом ни бум-бум. Помогите пожалуйста. |
SAS888 Пользователь Сообщений: 757 |
#2 01.03.2018 06:36:09 Если требуется «Отобразить все» не зависимо от того, применен автофильтр или нет, то можно так:
Если же требуется вообще удалить автофильтр с листа, то так:
Чем шире угол зрения, тем он тупее. |
||||
D07 Пользователь Сообщений: 60 |
«Если требуется «Отобразить все» не зависимо от того, применен автофильтр или нет, то можно так:» Да, Вы меня правильно поняли. Вставил в макрос — не работает . Выдает ту же ошибку в той же строке |
D07 Пользователь Сообщений: 60 |
Прошу прощения — это я балбес. Нужно было разнести по разным строкам |
DopplerEffect Пользователь Сообщений: 527 |
#5 01.03.2018 07:45:56
Этот код должен работать, сам проверял в работе, а выложите пример файла. |
||
ZVI Пользователь Сообщений: 4328 |
#6 01.03.2018 07:53:18
Или так: If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData |
||
D07 Пользователь Сообщений: 60 |
#7 01.03.2018 11:26:33
Все работает, я просто невнимательно сделал первый раз. |
||
adamm Пользователь Сообщений: 830 |
#8 04.11.2019 09:51:03 Всем привет!
, но после снятия всех фильтров в заголовках остаются кнопки, вроде как фильтр не снят, но на само деле снят, как можно исправить Прикрепленные файлы
|
||
skais675 Пользователь Сообщений: 2177 |
#9 04.11.2019 10:07:26
Мой канал |
||
adamm Пользователь Сообщений: 830 |
#10 04.11.2019 10:29:01 skais675, спасибо, я нашёл вот такой код, http://qaru.site/questions/228230/removing-filters-for-each-table-in-a-workbook-vba/1202718#1202718 :
Ваш код, то же работает, но в чём разница? |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#11 04.11.2019 10:43:16 Хорошая справка по работе с фильтрами
очень плохая идея Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
skais675 Пользователь Сообщений: 2177 |
#12 04.11.2019 10:55:17 В дополнении темы — полное удаление фильтров
Мой канал |
||
adamm Пользователь Сообщений: 830 |
#13 04.11.2019 11:03:05
Ситуация так требует, данные таблицы являются промежуточным звеном, выгружаются они из PQ, а к ним привязаны формулы |
||
RAN Пользователь Сообщений: 7091 |
#14 04.11.2019 13:24:26 Вам нужно удалить фильтры, или сбросить?
|
||
geniux Пользователь Сообщений: 5 |
я пользуюсь таким кодом, если нужно сбросить фильтры на одном листе или несколько (нужно добавить кнопку) Private Sub CommandButton1_Click() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets End Sub |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#16 05.11.2019 00:03:51 geniux, Вы видели, как код выглядит у других? |
На чтение 4 мин. Просмотров 14.2k.
Итог: узнайте, как очистить все фильтры и фильтры в одном столбце с помощью макросов VBA. Включает примеры кода для регулярных диапазонов и таблиц Excel.
Уровень мастерства: Средний
Содержание
- Скачать файл
- Очистить все фильтры из диапазона
- Ошибка метода ShowAllData
- Очистить все фильтры из таблицы Excel
- Очистить все фильтры во всех таблицах на листе
- Очистить фильтры в одной колонке
- Фильтры и типы данных
Скачать файл
Файл Excel, содержащий код, можно скачать ниже. Этот файл содержит код для фильтрации различных типов данных и типов фильтров. Пожалуйста, ознакомьтесь с моей статьей Фильтрация сводной таблицы или среза по самой последней дате или периоду для более подробной информации.
VBA AutoFilters Guide.xlsm (100.5 KB)
Очистить все фильтры из диапазона
Мы используем метод ShowAllData, чтобы очистить все фильтры,
примененные к диапазону.
Это аналогично нажатию кнопки «Очистить» на вкладке «Данные»
на ленте (сочетание клавиш: Alt, A, C)
К рабочему листу может быть применен только один диапазон
фильтров, поэтому мы на самом деле очищаем фильтры на листе.
Sub Clear_All_Filters_Range() ' Для очистки всех фильтров используйте метод ShowAllData ' для листа. Добавьте обработку ошибок, чтобы обойти ошибку, если ' фильтры не применяются. Не работает для таблиц. On Error Resume Next Sheet1.ShowAllData On Error GoTo 0 End Sub
Ошибка метода ShowAllData
Если к любому столбцу не применены фильтры, метод ShowAllData вызовет ошибку. Это ошибка времени выполнения ‘1004 с описанием:
Method ‘ShowAllData’ of object ‘_Worksheet’ failed.
Следующая строка On Error Resume Next будет игнорировать эту
ошибку. При ошибке GoTo 0 сбрасывается, поэтому ошибки возникают в любых
строках кода ниже.
Примечание. Когда метод ShowAllData упоминается как элемент листа, он НЕ очищает фильтры, которые применяются к таблицам Excel (ListObjects), если в таблице не выбрана ячейка. Поэтому лучше всего использовать приведенный ниже код для таблиц.
Чтобы очистить все фильтры таблицы Excel (ListObject), мы
также используем метод ShowAllData. В этом случае ShowAllData является членом
свойства AutoFilter объекта ListObject.
Sub Clear_All_Filters_Table() Dim lo As ListObject ' Установить ссылку на первую таблицу на листе Set lo = Sheet1.ListObjects(1) ' Очистить все фильтры для всей таблицы lo.AutoFilter.ShowAllData End Sub
Очистить все фильтры во всех таблицах на листе
Приведенный выше код удаляет фильтры только для одной
таблицы. Мы можем просмотреть таблицы на листе, чтобы удалить все фильтры из
каждой таблицы.
Sub Clear_All_Table_Filters_On_Sheet() Dim lo As ListObject ' Перебрать все таблицы на листе For Each lo In Sheet1.ListObjects ' Очистить все фильтры для всей таблицы lo.AutoFilter.ShowAllData Next lo End Sub
Очистить фильтры в одной колонке
Чтобы очистить фильтры для одного столбца, мы используем
метод AutoFilter. Мы ссылаемся только на параметр Field и устанавливаем
значение для номера столбца, который мы хотим очистить.
Sub Clear_Column_Filter_Range() ' Чтобы очистить фильтр от одного столбца, укажите ' Только номер поля и никаких других параметров Sheet1.Range("B3:G1000").AutoFilter Field:=4 End Sub
Поле — это номер столбца диапазона, к которому применяются
фильтры, а не номер столбца рабочего листа.
Тот же метод используется для очистки фильтров, примененных
к столбцу в таблице. В этом случае метод AutoFilter является членом объекта
Range объекта ListObject.
Sub Clear_Column_Filter_Table() Dim lo As ListObject ' Установить ссылку на первую таблицу на листе Set lo = Sheet1.ListObjects(1) ' Очистить фильтр в столбце одной таблицы, ' указав только параметр поля lo.Range.AutoFilter Field:=4 End Sub
Фильтры и типы данных
Параметры
раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце.
У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО
различных комбинаций операторов и критериев для каждого типа фильтра.
Я создал отдельные статьи для каждого из этих типов фильтров. Статьи содержат пояснения и примеры кода VBA.
- Как фильтровать числа с помощью VBA
- Как отфильтровать пустые и непустые ячейки
- Как фильтровать текст с помощью VBA
- Как отфильтровать даты по VBA
- Как отфильтровать цвета и значки с помощью VBA
Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.
Пожалуйста, оставьте
комментарий ниже с любыми вопросами или предложениями. Спасибо!
This thread is ancient, but I wasn’t happy with any of the given answers, and ended up writing my own. I’m sharing it now:
We start with:
Sub ResetWSFilters(ws as worksheet)
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This gets rid of "normal" filters - but tables will remain filtered
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
'And this gets rid of table filters
End Sub
We can feed a specific worksheet to this macro which will unfilter just that one worksheet. Useful if you need to make sure just one worksheet is clear. However, I usually want to do the entire workbook
Sub ResetAllWBFilters(wb as workbook)
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub
You can use this, by, for example, opening a workbook you need to deal with and resetting their filters before doing anything with it:
Sub ExampleOpen()
Set TestingWorkBook = Workbooks.Open("C:Intel......") 'The .open is assuming you need to open the workbook in question - different procedure if it's already open
Call ResetAllWBFilters(TestingWorkBook)
End Sub
The one I use the most: Resetting all filters in the workbook that the module is stored in:
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
Set wb = ThisWorkbook
'Set wb = ActiveWorkbook
'This is if you place the macro in your personal wb to be able to reset the filters on any wb you're currently working on. Remove the set wb = thisworkbook if that's what you need
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub
Return to VBA Code Examples
VBA – Turn Off AutoFilter / Clear Filters
In this Article
- Turn off AutoFilter in the Active Worksheet in VBA
- Turn on AutoFilter in the Active Worksheet in VBA
- Turn off AutoFilter in all Worksheets in VBA.
- Turn on AutoFilter in all Worksheets in VBA.
- Clear All Filters in the Active Worksheet in VBA
- Clear All Filters in all Worksheets in VBA
- Clear All Filters in a Table in VBA
- VBA Coding Made Easy
This tutorial will demonstrate how to turn off /clear AutoFilters in VBA.
AutoFilters can be turned on or off using VBA code.
Turn off AutoFilter in the Active Worksheet in VBA
The following code example turns off AutoFilter in the Active Sheet, checking first that it’s not Off already.
Public Sub KillFilter()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
Turn on AutoFilter in the Active Worksheet in VBA
The following code example turns on AutoFilter in the Active Sheet, checking first that it’s not on already.
Public Sub StartFilter()
If Not ActiveSheet.AutoFilterMode Then
ActiveSheet.Range("A1").AutoFilter
End If
End Sub
Turn off AutoFilter in all Worksheets in VBA.
The following code example loops through each sheet in the entire workbook and turns off AutoFilter in each worksheet, checking first that the filter in the current worksheet is not on already.
Public Sub StopAllFilters()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If ws.AutoFilterMode = True Then
ws.AutoFilterMode = False
End If
Next ws
End Sub
Turn on AutoFilter in all Worksheets in VBA.
Similarly, the following code example loops through the entire workbook and turns on AutoFilter in each sheet, checking first that the filter in the current worksheet is not already on.
Public Sub StartAllFilters()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If Not ws.AutoFilterMode Then
ws.Range("A1").AutoFilter
End If
Next ws
End Sub
Clear All Filters in the Active Worksheet in VBA
The following code example leaves the AutoFilter turned on in the Active Sheet, but clears any filter that are applied to the data.
Public Sub ClearFilter()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub
Clear All Filters in all Worksheets in VBA
Similarly, the following code example loops through the entire workbook and leaves the AutoFilter turned on in each sheet if it is already on, but clears any filter that are applied to the data.
Public Sub ClearAllFilters()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If ws.FilterMode = True Then
ws.ShowAllData
End If
Next ws
End Sub
Clear All Filters in a Table in VBA
Should our worksheet contain a table object, we can adjust the code to just clear any filter that is applied to that filter, while leaving the AutoFilter switched on.
Sub ClearFilterFromTable()
Dim ws As Worksheet
Dim sTable As String
Dim loTable As ListObject
sTable = "Table1"
Set ws = ActiveSheet
Set loTable = ws.ListObjects(sTable)
loTable.AutoFilter.ShowAllData
End Sub
Should the table object be linked to a Pivot Table, then the Pivot table would refresh accordingly.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
This thread is ancient, but I wasn’t happy with any of the given answers, and ended up writing my own. I’m sharing it now:
We start with:
Sub ResetWSFilters(ws as worksheet)
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This gets rid of "normal" filters - but tables will remain filtered
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
'And this gets rid of table filters
End Sub
We can feed a specific worksheet to this macro which will unfilter just that one worksheet. Useful if you need to make sure just one worksheet is clear. However, I usually want to do the entire workbook
Sub ResetAllWBFilters(wb as workbook)
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub
You can use this, by, for example, opening a workbook you need to deal with and resetting their filters before doing anything with it:
Sub ExampleOpen()
Set TestingWorkBook = Workbooks.Open("C:Intel......") 'The .open is assuming you need to open the workbook in question - different procedure if it's already open
Call ResetAllWBFilters(TestingWorkBook)
End Sub
The one I use the most: Resetting all filters in the workbook that the module is stored in:
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
Set wb = ThisWorkbook
'Set wb = ActiveWorkbook
'This is if you place the macro in your personal wb to be able to reset the filters on any wb you're currently working on. Remove the set wb = thisworkbook if that's what you need
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub