it-swarm.com.de

Excel 2013 VBA-Makro "Alle Filter löschen"

Es scheint, dass ältere Makros nicht funktionieren. Ich habe die richtigen Einstellungen für die Ausführung von VBA-Makros festgelegt, aber wenn ich ein paar Methoden zum Löschen ALLER Filter in einem Arbeitsblatt ausprobiert habe, erhalte ich einen Kompilierungsfehler.

Folgendes habe ich ausprobiert:

Sub AutoFilter_Remove()'This macro removes any filtering in order to display all of the data but it does not remove the filter arrowsActiveSheet.ShowAllDataEnd Sub

Ich habe Schaltflächen auf den Blättern, um alle Filter zu löschen, um den Benutzern die Verwendung zu erleichtern, da die Blätter über viele Spalten verfügen, die Filter enthalten.

35
CJSoldier

Wenn das Blatt bereits einen Filter enthält, gilt Folgendes:

Sub Macro1()
    Cells.AutoFilter
End Sub

wird es entfernen.

30
Gary's Student

Versuche dies:

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
51
CRondao

ShowAllData gibt einen Fehler aus, wenn derzeit kein Filter angewendet wird. Das wird funktionieren:

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

Versuchen Sie dies für Tabellen, um zu prüfen, ob es eingeschaltet ist, und deaktivieren Sie es:

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

Wieder einschalten:

wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
16
Aaron Donnelly

das funktioniert schön.!

If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
8
saltorr

Ich fand diese Problemumgehung, um ziemlich effektiv zu arbeiten. Im Wesentlichen wird der Autofilter aus der Tabelle entfernt und dann erneut angewendet, sodass alle vorherigen Filter entfernt werden. Aus meiner Erfahrung ist dies nicht anfällig für die Fehlerbehandlung, die bei den anderen hier genannten Methoden erforderlich ist.

Set myTable = YOUR_SHEET.ListObjects("YourTableName")

myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
5

Das ist großartig, die einzige Antwort, die ich gefunden habe und die mein spezielles Bedürfnis erfüllt hat, danke SO vielmals für das Aufstellen!

Ich habe es nur geringfügig ergänzt, damit der Bildschirm nicht blinkt und das Kennwort auf jedem Blatt entfernt und anschließend erneut angewendet wird, während es durchläuft [Ich habe für alle Blätter in der Arbeitsmappe dasselbe Kennwort]. Im Geiste Ihrer Vorlage füge ich dies hinzu, um anderen zu helfen ...

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

Ich weiß, dass dies ein relativ alter Beitrag ist und ich es nicht wirklich mag, ein Nekromant zu sein ... Aber da ich das gleiche Problem hatte und einige der Optionen in diesem Thread erfolglos ausprobiert habe, habe ich einige Antworten kombiniert, um ein funktionierendes Makro zu erhalten ..

Hoffentlich hilft das jemandem da draußen :)

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

Ich benutze normalerweise diesen Code

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

Das wird auch funktionieren:

If ActiveSheet.FilterMode Then
cells.AutoFilter
End If
3
Linga

Es gibt zwei Arten von Filtern in Excel:

  • Automatischer Filter
  • Erweiterter Filter

Mit der automatischen Filterfunktion können Sie mithilfe der winzigen Dropdown-Schaltflächen von der Excel-Oberfläche aus filtern. Mit der erweiterten Filterfunktion können Sie anhand eines Kriterienbereichs filtern.

Die ShowAll-Methode entfernt die Filter wie in, zeigt alle Zeilen an, entfernt jedoch nicht die Drop-Down-Schaltflächen. Sie müssen die AutoFilterMode-Eigenschaft des Arbeitsblatts auf FALSE setzen, um diese Schaltflächen zu entfernen.

Hier ist ein Sub, das ich häufig zum Entfernen von Filtern verwende:

Sub RemoveFilters(ByRef WhichSheet As Worksheet)

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

End Sub

Dies zeigt alle Daten und entfernt die Dropdown-Schaltflächen. Dies ist beim Stapeln (Kopieren und Einfügen) von Daten aus mehreren Blättern oder Arbeitsmappen hilfreich. Hoffe das hilft.

2
Ejaz Ahmed

Dabei wird zunächst geprüft, ob AutoFilterMode eingestellt ist (Filterung möglich). Dann wird geprüft, ob FilterMode aktiviert ist (Sie filtern nach etwas) und deaktivieren dann die Filterung.

In Bezug auf Fehler, d. H. Schutz - andere Antworten

Kontext hinzugefügt (mein Skript läuft über Blätter, die dann als CSV gespeichert werden. Daher müssen Filter entfernt werden. Wenn jedoch Folgendes festgelegt ist: 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
2
sastorsl

Versuchen Sie etwas so:

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 gibt true zurück, wenn sich das Arbeitsblatt im Filtermodus befindet. ( Für weitere Informationen siehe .)
Weitere Informationen zu .AutoFilter finden Sie unter .
Und schließlich: this enthält weitere Informationen zur .ShowAllData-Methode.

1
ARich

Hier ist der Einzeiler, den ich benutze. Es sucht nach einem automatischen Filter und entfernt es, falls es gefunden wird.

Im Gegensatz zu einigen Antworten wird mit diesem Code kein Autofilter erstellt, wenn er in einem Arbeitsblatt verwendet wird, das nicht automatisch gefiltert wird.

If Cells.AutoFilter Then Cells.AutoFilter
1
ChrisB

Ich verwende diesen Ansatz für einen Multitisch und ein Sortimentsblatt auf einzigartige Weise.

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
Mahhdy

Hier ist ein Code zum Fixieren von Filtern. Wenn Sie beispielsweise Filter in Ihrem Arbeitsblatt aktivieren, fügen Sie eine Spalte hinzu, und Sie möchten, dass die neue Spalte auch von einem Filter abgedeckt wird.

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
AdmiralAdama

Aktivieren Sie einfach die Filterkopfzeilen und führen Sie showalldata aus. Funktioniert 100%. So etwas wie:

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

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

Wenn Sie die Feldüberschriften in A1 haben: Z1 bzw. R1: Y1.

0
JDuarteDJ

Versuche dies: 

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

Dieser Code löscht alle Filter und entfernt die Sortierung.

Quelle: Filter für jede Tabelle in einer Arbeitsmappe entfernen, VBA

0
Markus Hanisch

Alles was Sie brauchen ist:

    ActiveSheet.AutoFilter.ShowAllData

Warum? Wie das Arbeitsblatt verfügt auch AutoFilter über eine ShowAllData-Methode, es wird jedoch kein Fehler ausgegeben, auch wenn der automatische Filter ohne aktiven Filter aktiviert ist.

0
John Joseph

Dies wird nur gelöscht, wenn Sie über einen Filter verfügen und keinen Fehler verursachen, wenn kein Filter vorhanden ist. Wenn ActiveSheet.AutoFilterMode Then ActiveSheet.Columns ("A"). AutoFilter

0
ganga chamlagai

Das funktioniert am besten für mich. 

Normalerweise verwende ich Folgendes, bevor ich die Dateien speichere und schließe.

Sub remove_filters

ActiveSheet.AutofilterMode = False

End Sub
0
Rahul Takalikar

Ich benutze .filtermode, wenn der Filter aktiviert ist, wird true zurückgegeben

Dim returnValue As Boolean
    returnValue = worksheet1.FilterMode

    if returnValue Then
    worksheet1.ShowAllData
    End If
0
Kesko

Dieser Thread ist uralt, aber ich war mit keiner der gegebenen Antworten zufrieden und schrieb am Ende meine eigenen. Ich teile es jetzt:

Wir beginnen mit:

  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

Wir können diesem Makro ein bestimmtes Arbeitsblatt zuführen, das nur dieses eine Arbeitsblatt entfiltern wird. Nützlich, wenn Sie sicherstellen müssen, dass nur ein Arbeitsblatt gelöscht wird. Normalerweise möchte ich jedoch die gesamte Arbeitsmappe erstellen

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

Sie können dies verwenden, indem Sie beispielsweise eine Arbeitsmappe öffnen, mit der Sie arbeiten müssen, und deren Filter zurücksetzen, bevor Sie irgendetwas damit tun:

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

Die, die ich am häufigsten benutze: Alle Filter in der Arbeitsmappe zurücksetzen, in denen das Modul gespeichert ist:

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
Selkie