Excel 2013 VBA Clear All Filters macro

后端 未结 26 852
花落未央
花落未央 2020-11-27 16:26

It seems older macros are not working. I have proper securtiy set to run VBA macros but when I have tried a few methods for clearing ALL filters on a worksheet, I get a comp

相关标签:
26条回答
  • 2020-11-27 16:53

    This will first check if AutoFilterMode is set (filtering is possible), then check if FilterMode is on (you are filtering on something) then turn off filtering.

    Regarding Errors, i.e. protection - se other answers

    Context added (my script is looping over sheets, which are then saved as CSV, hence the need to remove filters - but keep AutoFilterMode on, if set:

    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 讨论(0)
  • 2020-11-27 16:55

    ShowAllData will throw an error if a filter isn't currently applied. This will work:

    Sub ResetFilters()
        On Error Resume Next
        ActiveSheet.ShowAllData
    End Sub
    
    0 讨论(0)
  • 2020-11-27 16:55

    Try this:

    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
    

    This Code clears all filters and removes sorting.

    Source: Removing Filters for Each Table in a Workbook, VBA

    0 讨论(0)
  • 2020-11-27 16:57

    Wow. Logging in afterwards deleted all but a portion of the first line. My mistake. However, this will be terse.

    For both tests Enter text in A1 and A5 of Sheet1 Filter for blanks only. Run either test Enter text in A5 Try to filter!

    Sub SubsequentFilterFails()
       With Sheet1     'assumes code name is still Sheet1
          .ShowAllData  'assumes a filter has been applied
          .Range(.Cells(2, 1), .Cells(7, 1)).EntireRow.Delete
       End With
    End Sub
    
    Sub SubsequentFilterWorks()
       With Sheet1
          .Cells.AutoFilter
          .Range(.Cells(2, 1), .Cells(7, 1)).EntireRow.Delete
          .Cells.AutoFilter
       End With
    End Sub
    

    Thus, when filters are being cleared in order to clean the worksheet .Cells.AutoFilter will be used.

    0 讨论(0)
  • 2020-11-27 16:58

    There are two types of filters in Excel:

    • Auto Filter
    • Advanced Filter

    The Auto Filter feature lets you filter from the excel interface using those tiny dropdown buttons. And the Advanced filter feature lets you filter using a criteria range.

    The ShowAll method removes the filters, as in, shows all the rows, but does not get rid of those Drop Down buttons. You have to set the AutoFilterMode property of the worksheet to FALSE to remove those buttons.

    Here is a Sub that I use frequently to remove filters:

    Sub RemoveFilters(ByRef WhichSheet As Worksheet)
    
    If WhichSheet.FilterMode Then WhichSheet.ShowAllData
    If WhichSheet.AutoFilterMode Then WhichSheet.AutoFilterMode = False
    
    End Sub
    

    This shows all the data, and removes the dropdown buttons. It comes in handy while stacking (copying and pasting) data from multiple sheets or workbooks. Hope this helps.

    0 讨论(0)
  • 2020-11-27 17:00

    I usually use this code

    Sub AutoFilter_Remove()
        Sheet1.AutoFilterMode = False  'Change Sheet1 to the relevant sheet
                                       'Alternatively: Worksheets("[Your Sheet Name]").AutoFilterMode = False
    End Sub
    
    0 讨论(0)
提交回复
热议问题