Макрос снять фильтр excel

 

D07

Пользователь

Сообщений: 60
Регистрация: 06.06.2014

Добрый день.
Вопрос копеечный для тех, кто понимает. В архиве даже была такая тема, но там нет ответа на мой вопрос.
Через рекордер макросов записал простейший макрос на снятие фильтров через кнопку Данные-Очистить.
Завел макрос на кнопку. Макрос работает, если включены фильтры. Нет вопросов. А вот если нажать кнопку, когда фильтров нет — он выдает ошибку вот в этой (и единственной :) ) строке макроса

— ActiveSheet.ShowAllData

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

 

SAS888

Пользователь

Сообщений: 757
Регистрация: 01.01.1970

#2

01.03.2018 06:36:09

Если требуется «Отобразить все» не зависимо от того, применен автофильтр или нет, то можно так:

Код
On Error Resume Next: ActiveSheet.ShowAllData: On Error GoTo 0

Если же требуется вообще удалить автофильтр с листа, то так:

Код
ActiveSheet.AutoFilterMode = False

Чем шире угол зрения, тем он тупее.

 

D07

Пользователь

Сообщений: 60
Регистрация: 06.06.2014

«Если требуется «Отобразить все» не зависимо от того, применен автофильтр или нет, то можно так:»

Да, Вы меня правильно поняли. Вставил в макрос — не работает :(. Выдает ту же ошибку в той же строке

 

D07

Пользователь

Сообщений: 60
Регистрация: 06.06.2014

Прошу прощения — это я балбес. Нужно было разнести по разным строкам :)
Спасибо, заработало!

 

DopplerEffect

Пользователь

Сообщений: 527
Регистрация: 14.08.2017

#5

01.03.2018 07:45:56

Код
ActiveSheet.AutoFilterMode = False

Этот код должен работать, сам проверял в работе, а выложите пример файла.  

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

#6

01.03.2018 07:53:18

Цитата
SAS888 написал: On Error Resume Next: ActiveSheet.ShowAllData: On Error GoTo 0

Или так: If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Но если строки скрыты вручную или фильтром т.н. «умной» таблицы, то нужно уже так: Cells.Rows.Hidden = False

 

D07

Пользователь

Сообщений: 60
Регистрация: 06.06.2014

#7

01.03.2018 11:26:33

Цитата
DopplerEffect написал:
Этот код должен работать, сам проверял в работе, а выложите пример файла.  

Все работает, я просто невнимательно сделал первый раз.

 

adamm

Пользователь

Сообщений: 830
Регистрация: 29.12.2015

#8

04.11.2019 09:51:03

Всем привет!
Столкнулся почти с аналогичной задачей, так, что не стал создавать отдельную тему, суть следующая есть несколько умных таблиц размещённых на одном листе, нужно снять все фильтры со всех разом, данный код работает:

Код
Cells.Rows.Hidden = False

, но после снятия всех фильтров в заголовках остаются кнопки, вроде как фильтр не снят, но на само деле снят, как можно исправить

Прикрепленные файлы

  • Пример.xlsm (14.69 КБ)

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#9

04.11.2019 10:07:26

Код
Sub Button1_Click()
     With ActiveSheet
        For Each lo In .ListObjects
            lo.AutoFilter.ShowAllData
        Next
     End With
End Sub

Мой канал

 

adamm

Пользователь

Сообщений: 830
Регистрация: 29.12.2015

#10

04.11.2019 10:29:01

skais675, спасибо, я нашёл вот такой код,

http://qaru.site/questions/228230/removing-filters-for-each-table-in-a-workbook-vba/1202718#1202718

:

Код
Sub ResetFilters()
    Dim ws                    As Worksheet
    Dim wb                    As Workbook
    Dim listObj               As ListObject

    For Each ws In ActiveWorkbook.Worksheets
        For Each listObj In ws.ListObjects
            If listObj.ShowHeaders Then
                listObj.AutoFilter.ShowAllData
                listObj.Sort.SortFields.Clear
            End If
        Next listObj
    Next ws
End Sub

Ваш код, то же работает, но в чём разница?

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#11

04.11.2019 10:43:16

Хорошая справка по работе с фильтрами

Цитата
adamm: несколько умных таблиц размещённых на одном листе

очень плохая идея

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#12

04.11.2019 10:55:17

В дополнении темы — полное удаление фильтров

Код
Sub RemoveFilters()
    For Each lo In ActiveSheet.ListObjects
        If lo.ShowAutoFilter Then lo.ShowAutoFilter = False
    Next lo
End Sub

Мой канал

 

adamm

Пользователь

Сообщений: 830
Регистрация: 29.12.2015

#13

04.11.2019 11:03:05

Цитата
Jack Famous написал:
очень плохая идея

Ситуация так требует, данные таблицы являются промежуточным звеном, выгружаются они из PQ, а к ним привязаны формулы
Хотя вопрос не в этом, решение есть спасибо skais675,

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#14

04.11.2019 13:24:26

Вам нужно удалить фильтры, или сбросить?
Если сбросить, то

Код
Sub RemoveFilters()
    For Each lo In ActiveSheet.ListObjects
        lo.ShowAutoFilter = False
        lo.ShowAutoFilter = True
    Next lo
End Sub
 

geniux

Пользователь

Сообщений: 5
Регистрация: 17.10.2019

я пользуюсь таким кодом, если нужно сбросить фильтры на одном листе или несколько (нужно добавить кнопку)

Private Sub CommandButton1_Click()

  Dim ws As Worksheet

       For Each ws In ThisWorkbook.Worksheets
   On Error Resume Next
   If ws.AutoFilterMode Then
       ws.AutoFilterMode = False
   End If
   Next ws

   End Sub

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#16

05.11.2019 00:03:51

geniux, Вы видели, как код выглядит у других?

На чтение 4 мин. Просмотров 14.3k.

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

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

VBA Code to Clear Filters in Excel

Содержание

  1. Скачать файл
  2. Очистить все фильтры из диапазона
  3. Ошибка метода ShowAllData
  4. Очистить все фильтры из таблицы Excel
  5. Очистить все фильтры во всех таблицах на листе
  6. Очистить фильтры в одной колонке
  7. Фильтры и типы данных

Скачать файл

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

VBA AutoFilters Guide.xlsm (100.5 KB)

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

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

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

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

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

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.

VBA Clear Filters Error 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 и устанавливаем
значение для номера столбца, который мы хотим очистить.

Clear Filter on Single Column VBA AutoFilter Method Field Only

Sub Clear_Column_Filter_Range()
  
  ' Чтобы очистить фильтр от одного столбца, укажите
  ' Только номер поля и никаких других параметров
  Sheet1.Range("B3:G1000").AutoFilter Field:=4

End Sub

Поле — это номер столбца диапазона, к которому применяются
фильтры, а не номер столбца рабочего листа.

Field Parameter Value is Column Number of the Range or Table

Тот же метод используется для очистки фильтров, примененных
к столбцу в таблице. В этом случае метод 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

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

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

0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

1

Макрос удаления автофильтра

10.12.2015, 13:54. Показов 19747. Ответов 12


Студворк — интернет-сервис помощи студентам

Добрый день! Пишу макрос для обработки прайса, который мне присылает поставщик. В шапке прайса есть автофильтр, но мне для дальнешей работы с прайсом он только мешает. Не могу написать макрос отключения этого автофильтра. Логика такая — если он есть — выключить, если нету, то и не включать. Помогите, пожалуйста.
И еще вопрос — как удалить столбцы по заданному критерию. Есть таблица, в ней есть как нужные мне столбцы, так и не нужные. Так вот, я хочу удалить ненужные, причем с возможностью задавать название этого (этих) столбца(ов). Заранее спасибо!



0



Апострофф

Заблокирован

10.12.2015, 14:05

2

Цитата
Сообщение от Murrey
Посмотреть сообщение

если он есть — выключить, если нету, то и не включать.

Visual Basic
1
2
3
SUB AutoFilterOFF
Cells.AutoFilter
END SUB



1



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

10.12.2015, 14:07

 [ТС]

3

Спасибо, но при повторном выполнении он включает фильтр, а мне этого не нужно(



0



Апострофф

Заблокирован

10.12.2015, 14:15

4

включает, но со сброшенными параметрами фильтрации — чем это мешает?



0



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

10.12.2015, 14:22

 [ТС]

5

В общем-то ничем, просто защита от дальнейших вопрос сотрудников))



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

10.12.2015, 14:39

6

Murrey, А если так

Visual Basic
1
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.Cells.AutoFilter

или

Visual Basic
1
If Not ActiveSheet.AutoFilter Is Nothing Then ActiveSheet.Cells.AutoFilter



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

10.12.2015, 17:07

7

Murrey,

Visual Basic
1
activesheet.autofiltermode=false



1



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

11.12.2015, 05:51

 [ТС]

8

Добавлено через 49 секунд
pashulka, Спасибо, работает!



0



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

11.12.2015, 07:17

 [ТС]

9

Поискал по форуму, подходящих вариантов не нашел. Нужно удалять столбцы из таблицы. Во вложении пример. Как удалить по заданному параметру, например, мне не нужен столбец Код, Фото, Артикул.



0



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

11.12.2015, 07:57

 [ТС]

10

И еще вдогонку вопрос. Я копирую данные с одной книги в другую. Скопировать нужно в ячейку, которая находится на одну ячейку ниже диапазона «код». Как это описать в макросе?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

11.12.2015, 13:45

11

Цитата
Сообщение от Murrey
Посмотреть сообщение

Нужно удалять столбцы из таблицы. подходящих вариантов не нашел

Удалить столбцы с определенным заголовком — VBA
Макрос в Excel 2003 на удаление определенных столбцов — VBA

Добавлено через 5 минут

Цитата
Сообщение от Murrey
Посмотреть сообщение

Скопировать нужно в ячейку, которая находится на одну ячейку ниже диапазона «код»

Цитата
Сообщение от Murrey
Посмотреть сообщение

например, мне не нужен столбец Код

Так код — это заголовок(шапка) столбца, который Вы удалите или именованный диапазон ? Если первое, то зачем что-то сначала копировать, если всё равно потом удалять.



0



0 / 0 / 0

Регистрация: 10.12.2015

Сообщений: 10

11.12.2015, 13:54

 [ТС]

12

С копированием разобрался, а вот с удалением столбцов не очень. Код — это который в шапке таблицы. Смысл в том, чтобы удалять ненужные столбцы по их заголовку в шапке. Например, мне не нужен столбец Страна, я его удаляю.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

11.12.2015, 15:51

13

Murrey, Перейдите, например, по первой ссылке и просто перечислите все свои ненужные столбцы (строка#3)



0



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

Снять фильтр столбца на всех листах книги

китин

Дата: Пятница, 13.01.2017, 12:09 |
Сообщение № 1

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

Доброго всем времени суток. Собственно вопрос в названии. Возникла необходимость разом снять фильтр со всех( а их 21 лист) листов книги. Попробовал накропать что то самостоятельно, но не хочет работать по всем листам: только на активном.Вопрос: что не так сделал?
[vba]

Код

Sub Макрос1()
  Dim SO As Long, SO1 As Long, sh As Worksheet
  SO = Cells(15, Columns.Count).End(xlToLeft).Column
  SO1 = Cells(Rows.Count, 2).End(xlUp).Row
   For Each sh In ThisWorkbook.Sheets
     If sh.Name <> «План» And sh.Name <> «литье» Then

                    With sh
              ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2

                                End With
    End If
    Next sh

    End Sub

[/vba]


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

buchlotnik

Дата: Пятница, 13.01.2017, 12:18 |
Сообщение № 2

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

[vba]

Код

‘можно так

Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
    If sh.Name <> «План» And sh.Name <> «литье» Then

                    With sh
            sh.Activate
            ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2

                  End With
    End If
    Next sh

    End Sub

[/vba]

Сообщение отредактировал buchlotnikПятница, 13.01.2017, 12:25

 

Ответить

SLAVICK

Дата: Пятница, 13.01.2017, 12:22 |
Сообщение № 3

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

разом снять фильтр со всех

если именно снять со всех тогда вот:
[vba]

Код

Sub d()
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
    sh.ShowAllData
Next
End Sub

[/vba]
не увидел что по 2-му столбцу….
Тогда так:
[vba]

Код

Sub dd()
Dim sh As Worksheet
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
    Set fR = sh.AutoFilter.Range
    fR.AutoFilter Field:=2
Next
End Sub

[/vba]

К сообщению приложен файл:

9148151.xlsm
(24.1 Kb)


Иногда все проще чем кажется с первого взгляда.

 

Ответить

китин

Дата: Пятница, 13.01.2017, 13:35 |
Сообщение № 4

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

Спасибо всем!!!!!!! все получилось!!!


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Alex_ST

Дата: Пятница, 13.01.2017, 14:26 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

[vba]

Код

Sub Reset_All_Sheets_Filters()   ‘ сброс всех фильтров на всех листах активной книги
   Dim actShName$: actShName = ActiveSheet.Name
   Dim actCelAdr$: actCelAdr = ActiveCell.Address
   Application.ScreenUpdating = False
   Dim wsSh As Worksheet
   On Error Resume Next
   For Each wsSh In Sheets
      If wsSh.AutoFilterMode Then wsSh.ShowAllData
   Next
   Application.ScreenUpdating = True
   Sheets(actShName).Activate: Range(actCelAdr).Activate
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Эта ветка древняя, но я не был доволен ни одним из этих ответов и в итоге написал свое собственное. Я делюсь с ним сейчас:

Начнем с:

  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

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

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

Вы можете использовать это, например, открыв книгу, с которой вам нужно иметь дело и сбросить свои фильтры, прежде чем что-либо делать с ней:

Sub ExampleOpen()
Set TestingWorkBook = Workbooks.Open("C:Intel......") 'The .open is assuming you need to open the workbook in question - different procedure if it already open
Call ResetAllWBFilters(TestingWorkBook)
End Sub

Тот, который я использую больше всего: Сброс всех фильтров в книге, в которой хранится модуль:

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 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

Вопрос

Кажется, старые макросы не работают. У меня есть правильная система securti для запуска макросов VBA, но когда я попробовал несколько методов очистки ВСЕХ фильтров на рабочем листе, я получил ошибку компиляции.

Вот что я попробовал:

 
Sub AutoFilter_Remove ()
«Этот макрос удаляет любую фильтрацию, чтобы отобразить все данные, но не удаляет стрелки фильтра
ActiveSheet.ShowAllData
Конец Sub
< / pre > < / CODE >

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

38
2014-02-13T17:17:31+00:00
24

 Mistalis

Mistalis

Редактировал вопрос 12-го июля 2017 в 3:40

Востребованные видео

Программирование макросов на VBA в Excel

Фильтр ИнтеллиСенсе = найдётся ВСЁ Excel Макрос VBA

Фильтр по дате Excel Макрос VBA

Фильтр простой Excel Макрос VBA

Фильтр по дате Excel Макрос VBA

фильтр Павлова on action! Excel Макрос VBA

Как написать макрос в Excel – создание и запись VBA макросов в Excel 2013/2016. Урок 3

Фильтр мечты Excel Макрос VBA

VBA Advanced Filter - Filter any Excel Database 2013

Дубликаты пометить, первые очистить Excel Макрос VBA

-1- VBA Excel. Как включить макросы в EXCEL? Как добавить вкладку РАЗРАБОТЧИК на ленту в EXCEL?

Расширенный фильтр в Excel

Макросы Excel для начинающих | Программирование в excel VBA примеры

-3- VBA Excel. Сохранение файлов в Excel с поддержкой макросов. Как сохранить макрос?

Удалить строки НЕ содержащие слова Excel Макрос VBA Video 2018 06 07 153351



Этот вопрос имеет 1 ответ на английском, чтобы прочитать их войдите в свой аккаунт.

 CRondao

Ответ на вопрос

13-го февраля 2014 в 5:28

2014-02-13T17:28:37+00:00

#23681968

Решение / Ответ

Gary's Student

13-го февраля 2014 в 5:26

2014-02-13T17:26:14+00:00

#23681967

Если на листе уже есть фильтр, то:

удалит это.

 BobbyA

Ответ на вопрос

4-го мая 2014 в 11:18

2014-05-04T23:18:38+00:00

#23681970

ShowAllData допустит ошибку, если фильтр в данный момент не применяется. Это будет работать:

Aaron Donnelly

Ответ на вопрос

21-го августа 2014 в 8:08

2014-08-21T08:08:22+00:00

#23681973

Для таблиц попробуйте это, чтобы проверить, включено ли оно и выключено:

Включить:

 saltorr

Ответ на вопрос

19-го августа 2015 в 5:09

2015-08-19T05:09:28+00:00

#23681980

Julius  Getz Mørk

Ответ на вопрос

17-го декабря 2014 в 3:30

2014-12-17T15:30:57+00:00

#23681974

Я нашел этот обходной путь, чтобы работать довольно эффективно. Он в основном удаляет автофильтр из таблицы, а затем повторно применяет его, удаляя все предыдущие фильтры. По моему опыту, это не склонно к обработке ошибок, требуемой с другими методами, упомянутыми здесь.

 Shadmage

Ответ на вопрос

22-го февраля 2017 в 10:35

2017-02-22T22:35:37+00:00

#23682002

Это замечательно, единственный ответ, который я нашел, который удовлетворил мою особую потребность, большое спасибо за то, что вы подняли его!

Я сделал лишь небольшое дополнение к нему, чтобы экран не мигал, и он удалял и впоследствии повторно применял пароль на каждом листе, когда он циклически переключается [у меня один и тот же пароль для всех листов в книге]. В духе вашего подчинения я добавляю это, чтобы помочь кому-либо еще....

Я знаю, что это относительно старый пост, и мне не очень нравится быть некромантом... Но так как у меня была та же проблема, и я безуспешно попробовал несколько вариантов в этой теме, я объединил некоторые ответы, чтобы получить работающий макрос..

Надеюсь, это кому-то поможет :)

Ejaz Ahmed

Ответ на вопрос

15-го августа 2018 в 3:01

2018-08-15T15:01:05+00:00

#23682027

В Excel есть два типа фильтров:

  • Автофильтр
  • Расширенный фильтр

Функция автоматического фильтра позволяет фильтровать из интерфейса Excel с помощью этих крошечных раскрывающихся кнопок. А функция расширенного фильтра позволяет фильтровать с использованием диапазона критериев.

Метод ShowAll удаляет фильтры, как в, показывает все строки, но не избавляет от этих кнопок Drop Down. Чтобы удалить эти кнопки, необходимо установить свойство AutoFilterMode рабочего листа на FALSE.

Вот Sub, который я часто использую для удаления фильтров:

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

Anastasiya-Romanova 秀

Ответ на вопрос

3-го августа 2016 в 10:30

2016-08-03T10:30:35+00:00

#23681997

Я обычно использую этот код

 Linga

Ответ на вопрос

14-го апреля 2015 в 9:29

2015-04-14T09:29:32+00:00

#23681975

 sastorsl

Ответ на вопрос

4-го июля 2014 в 1:25

2014-07-04T13:25:08+00:00

#23681971

Сначала будет проверена, установлен ли AutoFilterMode (возможно фильтрация), затем проверена, включен ли FilterMode (вы что-то фильтруете), а затем отключите фильтрацию.

Что касается ошибок, т.е. защита - другие ответы

Добавлен контекст (мой скрипт зацикливается на листах, которые затем сохраняются как CSV, поэтому необходимо удалить фильтры - но сохранить AutoFilterMode включенным, если установлено:

 ARich

Ответ на вопрос

13-го февраля 2014 в 5:30

2014-02-13T17:30:24+00:00

#23681969

Попробуйте что-то вроде этого:

.FilterMode возвращает true, если рабочий лист находится в режиме фильтра. (См. Это для получения дополнительной информации.)
См. Это для получения дополнительной информации о .AutoFilter.
И, наконец, это предоставит больше информации о методе .ShowAllData.

 ChrisB

Ответ на вопрос

11-го августа 2017 в 8:04

2017-08-11T20:04:42+00:00

#23682007

Вот одна строка, которую я использую. Он проверяет автофильтр и, если найден, удаляет его.

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

 Mahhdy

Ответ на вопрос

26-го апреля 2019 в 7:44

2019-04-26T19:44:47+00:00

#23682048

Я использую этот подход для многостолового стола и таблицы диапазонов как уникальный способ.

 JDuarteDJ

Ответ на вопрос

21-го июля 2014 в 10:34

2014-07-21T10:34:06+00:00

#23681972

Просто активируйте заголовки фильтров и запустите showalldata, работает на 100%. Что-то вроде:

Если у вас есть полевые заголовки в A1: Z1 и R1: Y1 соответственно.

 Kesko

Ответ на вопрос

21-го апреля 2015 в 9:19

2015-04-21T09:19:01+00:00

#23681976

Я использую .filtermode, если фильтр включен, возвращает true

Markus Hanisch

Ответ на вопрос

3-го августа 2016 в 8:26

2016-08-03T08:26:19+00:00

#23681992

Попробуй это:

Этот код очищает все фильтры и удаляет сортировку.

Источник: Удаление фильтров для каждой таблицы в рабочей книге, VBA

 AdmiralAdama

Ответ на вопрос

21-го февраля 2017 в 6:57

2017-02-21T18:57:52+00:00

#23681998

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

 Selkie

Ответ на вопрос

4-го декабря 2017 в 10:37

2017-12-04T22:37:39+00:00

#23682011

Эта тема древняя, но я не был доволен ни одним из данных ответов и закончил тем, что написал свой собственный. Я делюсь этим сейчас:

Начнем с:

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

Вы можете использовать это, например, открыв рабочую книгу, с которой вам нужно разобраться, и сбросив их фильтры, прежде чем что-то с ней делать:

Тот, который я использую больше всего: Сброс всех фильтров в рабочей книге, в которой хранится модуль:

ganga chamlagai

Ответ на вопрос

20-го сентября 2018 в 3:26

2018-09-20T15:26:28+00:00

#23682037

Это будет понятно только в том случае, если у вас есть фильтр, и не вызывает ошибок при отсутствии фильтра.
Если ActiveSheet.AutoFilterMode, то ActiveSheet.Columns ("A"). AutoFilter

Похожие сообщества
2

Excel Chat

excel_ru

Похожие вопросы

Has your data import procedure ever failed due to users applying filters on the data? This happens quite often, especially when you distribute multiple files, which you then stack. Copying filtered data copies only the filtered rows. You end up loosing the hidden rows if users filtered data before saving the workbook. Let us take a look at how to remove filters in an Excel sheet using VBA.

Before we dive into how to remove filters, let us briefly take a look at the types of filtering capability Excel offers. Filtering in Excel comes in two flavours:

  • Auto Filter
  • Advanced Filter

Auto filter adds dropdown buttons to the columns, which offer you a variety of filtering and sorting options through an intuitive graphical interface. Advanced Filter on the other hand, lets you specify your filtering criteria in a range of cells.

Auto Filter is easy to spot visually; the dropdowns are hard to miss. However, Advanced Filter is a harder to spot. In both cases, if some of the Row Numbers to the left of a sheet appear blue instead of the regular black colour, filters have been applied on that sheet.

Mastering both these skills are essential for anybody who uses Excel at their workplace. There are a multitude of resources on the internet on these topics. I recommend you familiarise yourself with filtering data in Excel.

The ShowAllData method of the Worksheet object lets you remove any filters that were applied on the data. However, it throws a runtime error when filters have not been applied. One could simply supress the error and call it a day, but I’d loose sleep over resorting to such cowardice. Let us try to figure out a legitimate way of finding whether or not filters have been applied on a sheet.

The FilterMode property of the Worksheet object gets set to TRUE, when filters are applied either as Auto Filters or Advanced Filters. This is a Read-Only property. It can be used to check whether any filters are applied, before using the ShowAllData method. This will help us ensure a runtime error is not triggered when calling the ShowAllData method.

If you are interested in removing the Auto Filter Dropdown buttons as well, which is how I prefer it, you can use the AutoFilterMode property to turn it off. This property is not a Read-Only property, which means you can set it to TRUE to activate AutoFilters and vice versa.

Wrapping this all up, here is a Sub that I use very frequently, which you can use in your projects:

Sub RemoveFilters(ByRef WhichSheet As Worksheet)
'If data is filtered either using AutoFilters or Advanced Filters
'Show all the data
If WhichSheet.FilterMode Then WhichSheet.ShowAllData
'Hide the AutoFilter DropDown Buttons
If WhichSheet.AutoFilterMode Then WhichSheet.AutoFilterMode = False
End Sub

Just pass a Worksheet to the above sub to remove filters without encountering a runtime error.

Note that having Excel Tables, also known List Objects in VBA, in the worksheet could throw these properties off, especially when the active cell is in a Table. If you are using Excel Tables, and I highly recommend that you do, you can deal with filters applied to a table specifically. We will reserve that discussion for another day.


Downloads

Click the link below to download a workbook with the above code. It also has a cover macro on removing filters in the active sheet.

Remove Filters V1.01.xlsb

Remove Filters V1.01.xlsb

Further Reading

  • Advanced filters come in handy when you have to apply a rather complex filter criteria repeatedly. It is also easy to filter data using VBA if you create an appropriate criteria range. Coding the application of AutoFilters is rather cumbersome. Here is an introduction to using AutoFilters in Excel:
    • Excel Advanced Filter Introduction – Debra Dalgleish

Понравилась статья? Поделить с друзьями:
  • Макрос следующая строка excel
  • Макрос скрытия ячеек excel
  • Макрос скрывающий пустые строки в excel
  • Макрос синтаксис if в excel
  • Макрос синонимайзер для word