VBA Filter zurücksetzen intelligente Tabelle
#1
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?
LG Herbert
Windows 10
Office 365
Antworten Top
#2
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
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?
LG Herbert
Windows 10
Office 365
Antworten Top
#4
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
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
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#6
Code:
Sub M_snb()
    If Sheets(1).ListObjects(1).Range.AutoFilter Then Sheets(1).ListObjects(1).Range.AutoFilter
End Sub
Antworten Top
#7
Smile 
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!
LG Herbert
Windows 10
Office 365
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste