Подтвердить что ты не робот

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

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

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

 
Sub AutoFilter_Remove()
'Этот макрос удаляет любую фильтрацию, чтобы отображать все данные, но не удаляет стрелки фильтра
ActiveSheet.ShowAllData
End Sub

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

4b9b3361

Ответ 1

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

Sub Macro1()
    Cells.AutoFilter
End Sub

удалит его.

Ответ 2

Попробуйте следующее:

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData

Ответ 3

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

Sub ResetFilters()
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub

Ответ 4

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

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

Включение:

wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter

Ответ 5

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

If ActiveSheet.AutoFilterMode Then Cells.AutoFilter

Ответ 6

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

Set myTable = YOUR_SHEET.ListObjects("YourTableName")

myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True

Ответ 7

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

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

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

Ответ 8

Это тоже будет работать:

If ActiveSheet.FilterMode Then cells.AutoFilter

Ответ 9

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

Sub AutoFilter_Remove()
    Sheet1.AutoFilterMode = False  'Change Sheet1 to the relevant sheet
                                   'Alternatively: Worksheets("[Your Sheet Name]").AutoFilterMode = False
End Sub

Ответ 10

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

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

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

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

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

Sub RemoveFilters(ByRef WhichSheet As Worksheet)

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

End Sub

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

Ответ 11

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

Относительно ошибок, т.е. защиты - другие ответы

Добавлен контекст (мой script перебирает листы, которые затем сохраняются как 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

Ответ 12

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

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.
И, наконец, this предоставит больше информации о методе .ShowAllData.

Ответ 13

Здесь используется однострочный вкладыш. Он проверяет автофильтр и, если найден, удаляет его.

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

If Cells.AutoFilter Then Cells.AutoFilter

Ответ 14

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

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

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

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

Ответ 15

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

Dim returnValue As Boolean
    returnValue = worksheet1.FilterMode

    if returnValue Then
    worksheet1.ShowAllData
    End If

Ответ 16

Попробуйте следующее:

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

Ответ 17

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

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

Ответ 18

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

Начнем с:

  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

Ответ 19

Все, что тебе нужно:

    ActiveSheet.AutoFilter.ShowAllData

Зачем? Как и лист, AutoFilter также имеет метод ShowAllData, но он не выдает ошибку, даже если автофильтр включен без активного фильтра.

Ответ 20

Это будет сброшено, только если у вас есть фильтр, и не вызовет никаких ошибок, когда нет никакого фильтра. Если ActiveSheet.AutoFilterMode, то ActiveSheet.Columns("A"). Автофильтр

Ответ 21

Это работает лучше всего для меня.

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

Sub remove_filters

ActiveSheet.AutofilterMode = False

End Sub

Ответ 22

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

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

Ответ 23

Я нашел этот ответ на веб-странице

Он использует AutoFilterMode как логическое.

   If Worksheets("Sheet1").AutoFilterMode Then Selection.AutoFilter

Ответ 24

Вы должны сначала выбрать диапазон таблицы перед использованием ActiveSheet.ShowAllData