Excel VBA AUTOFILTER

Bild

Betrifft: Excel VBA AUTOFILTER
von: AJB
Geschrieben am: 05.11.2015 12:59:02

Hallo zusammen,
folgendes Problem:
Der Code soll einen Autofilter setzen, falls kein Filter vorhanden ist (auch keine Filterzeile).
Falls doch, soll er nur alle Werte anzeigen! (.ShowallData)

'Filter löschen/einfügen
Worksheets("Umsatzliste_YMMA0231_1").Activate
With ActiveWorkbook.ActiveSheet
If .AutoFilterMode = True Then
.ShowAllData
Else
Range("Tabelle2[#Headers]").Select
Selection.AutoFilter
End If
End With

Der bisherige Code überspringt immer den If-Teil! Auch
.AutoFilter statt .AutoFiltermode hilft nicht weiter.
Vielen Dank für die Antworten :D

Bild

Betrifft: AW: Excel VBA AUTOFILTER
von: matthias
Geschrieben am: 05.11.2015 13:40:37
Hallo AJB,
AutoFilterMode prüft ob ein Filter vorhanden ist, nicht ob tatsächlich gefiltert wurde, darum erzeugt .ShowAllData einen Fehler. Der Befehl dafür nenn sich FilterMode.
Die Anweisung .AutoFilterMode gibt wenn er aktiv ist schon den Wert True zurück, das ergäbe bei dir dann: If True = True Then ...
Dies ist natürlich überflüssig, darum kann man das so schreiben:

Sub Test()
With Worksheets("Umsatzliste_YMMA0231_1")
If .AutoFilterMode Then 'Autofilter vorhanden?
    If .FilterMode Then .ShowAllData 'Autofilter in Benutzung? Wenn Ja, dann zeige alle Daten
Else 'kein Filter vorhanden
    .Cells.AutoFilter 'Filter setzen
End If
End With
End Sub
Für die Faulen geht aber auch den Autofilter komplett zu entfernen und neu zu setzen, falls es keinen triftigen Grund gibt dies zu unterlassen. Denn beim Entfernen wird eh alles wieder angezeigt.
Sub Test()
With ActiveSheet
If .AutoFilterMode Then .Cells.AutoFilter 'entfernen
.Cells.AutoFilter 'neu setzen
End With
End Sub
Statt .Cells kannst du wieder deine Range("...") angeben, muss aber nicht. Denn bei .Cells erkennt er das komplette Blatt als Filterbereich an.
lg Matthias

Bild

Betrifft: AW: Excel VBA AUTOFILTER
von: AJB
Geschrieben am: 05.11.2015 14:02:18
Moin,
der Code umgeht jedes mal die If-Schleife. Das heißt, egal ob ein Filter gesetzt ist (DABEI SIND KEINE Daten ausgefiltert, lediglich die Filteransicht ist aktiviert - oben in der Menu-Leiste gelb hinterlegt) Schwierig zu beschreiben:(
Aber auch wenn ich den Filter komplett rausnehme, (oben in der Menuleiste ist der Filter wieder grau) überspringt er die If Schleife.
Danke schon mal im Vorraus

Bild

Betrifft: AW: Excel VBA AUTOFILTER
von: EtoPHG
Geschrieben am: 05.11.2015 13:59:04
Hallo AJB
Ich bin der Meinung, dass du den falschen Bereich abfragst.
Dein Code, nach dem Else, deutet darauf hin, dass du einen Filter eines ListObjects und nicht einen des Blatts testen willst. Dss sind 2 verschiedene Paar Stiefel. Auf einem ListObject funktioniert z.B. die .AutoFilterMode Eigenschaft nicht. Auf einem ListObject kannst du den Zustand des .AutoFilter ein und ausschalten. Auf letzteren gibt es keine .ShowAllData Methode, sondern du musst die Filter einzeln zurücksetzen. Lies die VBA Hilfe zu ListObject-Objekt und dessen Eigenschaften und Methoden!
Gruess Hansueli

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Excel VBA AUTOFILTER"