Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA AUTOFILTER

Excel VBA AUTOFILTER
05.11.2015 12:59:02
AJB
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

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA AUTOFILTER
05.11.2015 13:40:37
matthias
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

Anzeige
AW: Excel VBA AUTOFILTER
05.11.2015 14:02:18
AJB
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

Anzeige
AW: Excel VBA AUTOFILTER
05.11.2015 13:59:04
EtoPHG
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA Autofilter effizient nutzen


Schritt-für-Schritt-Anleitung

Um den Excel VBA Autofilter korrekt zu setzen und zu überprüfen, ob bereits ein Filter aktiv ist, kannst du den folgenden VBA-Code verwenden:

Sub Test()
    With Worksheets("Umsatzliste_YMMA0231_1")
        If .AutoFilterMode Then ' Prüft, ob ein Autofilter vorhanden ist
            If .FilterMode Then .ShowAllData ' Zeigt alle Daten an, wenn der Filter aktiv ist
        Else ' Wenn kein Filter vorhanden ist
            .Cells.AutoFilter ' Setzt den Autofilter
        End If
    End With
End Sub

Dieser Code stellt sicher, dass der Autofilter aktiviert wird, wenn er noch nicht vorhanden ist, und zeigt alle Daten an, wenn der Filter aktiv ist.


Häufige Fehler und Lösungen

  1. Fehler: If-Teil wird übersprungen

    • Ursache: Der Code verwendet .AutoFilterMode, um zu überprüfen, ob ein Filter aktiv ist, was nur die Existenz eines Filters prüft. Um festzustellen, ob tatsächlich gefiltert wird, verwende .FilterMode.
  2. Fehler: ShowAllData funktioniert nicht

    • Ursache: Wenn der Autofilter nicht aktiv ist, wird .ShowAllData einen Laufzeitfehler erzeugen. Stelle sicher, dass du zuerst mit If .FilterMode Then prüfst.

Alternative Methoden

Eine einfachere Methode, um den Excel VBA Autofilter zu handhaben, ist, den Autofilter vollständig zu entfernen und neu zu setzen. Hier ist ein Beispiel:

Sub Test()
    With ActiveSheet
        If .AutoFilterMode Then .Cells.AutoFilter ' Entfernt den Autofilter
        .Cells.AutoFilter ' Setzt den Autofilter neu
    End With
End Sub

Dieser Code entfernt zuerst den Autofilter, falls er aktiv ist, und setzt ihn dann neu. Dies ist eine effiziente Methode, wenn du sicherstellen möchtest, dass alle Daten angezeigt werden.


Praktische Beispiele

  • Beispiel 1: Filter auf eine bestimmte Spalte anwenden
Sub FilterBeispiel()
    With Worksheets("Umsatzliste_YMMA0231_1")
        .Range("A1:D1").AutoFilter Field:=2, Criteria1:=">1000"
    End With
End Sub

Dieser Code wendet einen Filter auf die zweite Spalte an, um nur die Werte größer als 1000 anzuzeigen.

  • Beispiel 2: Autofilter auf ListObject anwenden

Wenn du mit ListObjects arbeitest, sieht der Code so aus:

Sub ListObjectFilter()
    Dim lo As ListObject
    Set lo = Worksheets("Umsatzliste_YMMA0231_1").ListObjects("Tabelle2")

    With lo
        If .AutoFilter.FilterMode Then
            .AutoFilter.ShowAllData ' Zeigt alle Daten im ListObject an
        Else
            .Range.AutoFilter ' Aktiviert den Autofilter für das ListObject
        End If
    End With
End Sub

Tipps für Profis

  • Filter auf mehrere Kriterien anwenden: Du kannst den Autofilter so einstellen, dass er mehrere Kriterien gleichzeitig berücksichtigt.

  • Automatisierung: Integriere die Filterfunktion in deine Arbeitsabläufe, um Zeit zu sparen und die Effizienz zu steigern.

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in deine VBA-Skripte ein, um unerwartete Probleme zu vermeiden.


FAQ: Häufige Fragen

1. Wie setze ich einen Autofilter in Excel VBA?
Du kannst einen Autofilter mit dem Befehl .AutoFilter auf einem bestimmten Bereich oder einer Tabelle setzen.

2. Was ist der Unterschied zwischen AutoFilterMode und FilterMode?
AutoFilterMode prüft, ob der Autofilter aktiviert ist, während FilterMode überprüft, ob tatsächlich gefiltert wird.

3. Wie kann ich alle Daten anzeigen, wenn ein Filter aktiv ist?
Verwende die Methode .ShowAllData, um alle gefilterten Daten anzuzeigen, solange der Filter aktiv ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige