Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

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 7
Excel 2010
to 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
to 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 7
Excel 2010
to 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
to 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.
3a2920576572206973742064656e20646120736f206e65756769657269672e
 ?mage

to top
#6
Code:
Sub M_snb()
    If Sheets(1).ListObjects(1).Range.AutoFilter Then Sheets(1).ListObjects(1).Range.AutoFilter
End Sub
to 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 7
Excel 2010
to top


Gehe zu:


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