Excel 2013 VBA Очистить все фильтры макро

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

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

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

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

Комментарии к вопросу (1)

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

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
Комментарии (3)
Решение

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

Sub Macro1()
    Cells.AutoFilter
End Sub

удалит это.

Комментарии (1)

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

Sub ResetFilters()
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub
Комментарии (6)

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

If wrkSheetCodeName.ListObjects("TableName").ShowAutoFilter Then
    wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
End if

Включить:

wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
Комментарии (0)

это работает хорошо.!

If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Комментарии (0)

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

Set myTable = YOUR_SHEET.ListObjects("YourTableName")

myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
Комментарии (0)

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

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

Sub ClearFilters()
    Application.ScreenUpdating = False

    On Error Resume Next
    For Each wrksheet In ActiveWorkbook.Worksheets
        'Change the password to whatever is required
        wrksheet.Unprotect Password:="Albuterol1"
        wrksheet.ShowAllData 'This works for filtered data not in a table

        For Each lstobj In wrksheet.ListObjects
            If lstobj.ShowAutoFilter Then
                lstobj.Range.AutoFilter 'Clear filters from a table
                lstobj.Range.AutoFilter 'Add the filters back to the table
            End If

        'Change the password to whatever is required
        wrksheet.Protect Password:="Albuterol1", _
              DrawingObjects:=True, _
              Contents:=True, _
              Scenarios:=True, _
              AllowFiltering:=True
        Next 'Check next worksheet in the workbook
    Next

    Application.ScreenUpdating = True
End Sub

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

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

Sub ResetFilters()
    On Error Resume Next
    For Each wrksheet In ActiveWorkbook.Worksheets
        wrksheet.ShowAllData 'This works for filtered data not in a table
        For Each lstobj In wrksheet.ListObjects
            If lstobj.ShowAutoFilter Then
                lstobj.Range.AutoFilter 'Clear filters from a table
                lstobj.Range.AutoFilter 'Add the filters back to the table
            End If
        Next 'Check next worksheet in the workbook
    Next
End Sub
Комментарии (0)

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

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

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

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

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

Sub RemoveFilters(ByRef WhichSheet As Worksheet)

If WhichSheet.FilterMode Then WhichSheet.ShowAllData
If WhichSheet.AutoFilterMode Then WhichSheet.AutoFilterMode = False

End Sub

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

Комментарии (0)

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

Sub AutoFilter_Remove()
    Sheet1.AutoFilterMode = False  'Change Sheet1 to the relevant sheet
                                   'Alternatively: Worksheets("[Your Sheet Name]").AutoFilterMode = False
End Sub
Комментарии (0)

Это тоже сработает:

If ActiveSheet.FilterMode Then cells.AutoFilter
Комментарии (0)

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

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

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

For Each WS In ActiveWorkbook.Worksheets
  Select Case WS.Name
    Case "01", "02", "03", "04", "05"
      With WS
        If WS.AutoFilterMode Then
            If WS.FilterMode Then WS.ShowAllData
        End If

        ' Processing data
      End With
    Case Else
      ' Nothing to see here
  End Select
Next
Комментарии (0)

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

Sub ClearDataFilters()
'Clears filters on the activesheet. Will not clear filters if the sheet is protected.
On Error GoTo Protection
If ActiveWorkbook.ActiveSheet.FilterMode Or _
   ActiveWorkbook.ActiveSheet.AutoFilterMode Then _
   ActiveWorkbook.ActiveSheet.ShowAllData

Exit Sub
Protection:
If Err.Number = 1004 And Err.Description = _ 
    "ShowAllData method of Worksheet class failed" Then
    MsgBox "Unable to Clear Filters. This could be due to protection on the sheet.", _
    vbInformation
End If

End Sub

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

Комментарии (0)

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

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

If Cells.AutoFilter Then Cells.AutoFilter
Комментарии (0)

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

Sub RemoveFilters(Ws As Worksheet)
Dim LO As ListObject
On Error Resume Next
    Ws.ShowAllData
    For Each LO In Ws.ListObjects
        LO.ShowAutoFilter = True
        LO.AutoFilter.ShowAllData
    Next
    Ws.ShowAllData
End Sub
Комментарии (0)

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

Range("A1:Z1").Activate
ActiveSheet.ShowAllData

Range("R1:Y1").Activate
ActiveSheet.ShowAllData

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

Комментарии (0)

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

Dim returnValue As Boolean
    returnValue = worksheet1.FilterMode

    if returnValue Then
    worksheet1.ShowAllData
    End If
Комментарии (0)

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

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

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

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

Комментарии (0)

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

Private Sub AddOrFixFilters()

    ActiveSheet.UsedRange.Select

    ' turn off filters if on, which forces a reset in case some columns weren't covered by the filter
    If ActiveSheet.AutoFilterMode Then
        Selection.AutoFilter
    End If

    ' turn filters back on, auto-calculating the new columns to filter
    Selection.AutoFilter

End Sub
Комментарии (0)

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

Начнем с:

  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's 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'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
Комментарии (0)

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

Комментарии (0)