Clever-Excel-Forum

Normale Version: VBA Filter zurücksetzen intelligente Tabelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe ein Tabellenblatt mit einer "intelligenten Tabelle".

Ich möchte den Filter, sofern einer gesetzt ist zurücksetzen.
Ich mache es mit folgendem Code, in dem ich die erste Zelle der intelligenten Tabelle auswähle und dann alle Daten anzeigen lasse.
Code:
Range("Tabellenname[[#Headers],[Datum]]").Select
ActiveSheet.ShowAllData
Range("A1").Select
Das funktioniert nur, wenn auch gefiltert ist.
Wenn kein Filter gesetzt ist kommt die Meldung
Laufzeitfehler '1004'
Die ShowAllData-Methode des Worksheet-Objektes kann nicht ausgeführt werden.

Wenn ich das Tabellenblatt anspreche und ShowAllData verwende, wird der Filter in der intellegenten Tabelle nicht erkannt und auch nicht zurückgesetzt.
Wie kann ich überprüfen, ob in der Tabelle eine Filter gesetzt ist und zurücksetzten?
Hi!
Da Du ja nur ein ListObject im Worksheet hast:
Code:
Sub RPP()
With Sheets("Tabelle2")
  If .FilterMode Then .ShowAllData
End With
End Sub

Gruß Ralf
Hallo Ralf,

das funktioniert nur, wenn ich auch eine Zelle in der Tabelle ausgewählt habe.
Ist eine Zelle außerhalb des Bereiches der "intelligenten" Tabelle ausgewählt wird der Filter nicht zurückgesetzt.
Mit If ... geht meine Variante.
Gibt es vielleicht noch eine andere?
Code:
With Sheets("Tabelle1")
Range("Tabellenname[[#Headers],[Datum]]").Select
 If .FilterMode Then .ShowAllData
Range("A1").Select
End With

Verstehe oder mache ich etwas falsch?
Ja, Herbert, Du hast Recht!

Dies funktioniert bei mir (obwohl es sich ein wenig seltsam liest).

Code:
Sub RPP()
With Tabelle2.ListObjects("Tabelle1").DataBodyRange
  If .AutoFilter Then .AutoFilter
End With
End Sub

Den Namen des ListObject erhälst Du unter Tabellentools, Tabellenname.

Gruß Ralf
Hallo Herbert,

anbei noch etwas

Code:
With ActiveSheet.Range("Tabelle1").ListObject 'Namen anpassen
If .ShowAutoFilter Then
   If .AutoFilter.FilterMode Then
        .AutoFilter.ShowAllData
   End If
 End If
End With
Code:
Sub M_snb()
    If Sheets(1).ListObjects(1).Range.AutoFilter Then Sheets(1).ListObjects(1).Range.AutoFilter
End Sub
Hallo Ralf, Chris, snb!

es funktionieren alle 3 Möglichkeiten.

Ich habe mich für die von Chris entschieden, der Grund ist nur, dass sich der Code verständlicher liest :19: .

Danke!