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.
Wenn das Blatt bereits einen Filter enthält, gilt Folgendes:
Sub Macro1()
Cells.AutoFilter
End Sub
wird es entfernen.
Versuche dies:
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
ShowAllData gibt einen Fehler aus, wenn derzeit kein Filter angewendet wird. Das wird funktionieren:
Sub ResetFilters()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
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
das funktioniert schön.!
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
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
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
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
Es gibt zwei Arten von Filtern in Excel:
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.
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
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.
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
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
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
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.
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
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.
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
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
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
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