Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Listobject und autofilter

Listobject und autofilter
22.07.2015 10:14:44
P-Quest
Hallo,
wie es scheint, scheitere ich heute morgen schon an einer Banalität. Ic h möchte überprüfen, ob in einem listobject der Autofilter eingeschaltet ist.
Wenn dem so ist, sollen alle evtl. vorhandenen Filterkriterien entfernt. Ist der Autofilter nicht eingeschaltet, soll er aktiviert werden.
Im weiteren Verlauf soll dann ein best. Kriterium gesetzt und die gefilterten Daten kopiert werden.
Aber dazu habe ich sicher später noch Fragen :-)
Hier erst mal Problem Nr.1. (Autofilter in Tabelle ist aktiv und es ist auch ein Kriterium eingegeben)
Sub AutoFilter()
Set ws = Worksheets("EinAus")
With ws.ListObjects("Bewegungen")
MsgBox .AutoFilter.FilterMode
If .AutoFilter.FilterMode = True Then
.AutoFilter.ShowAllData
Else
.AutoFilter.FilterMode = True
End If
End With
End Sub
Excel quittiert den Code mit:
Fehler beim kompilieren
Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft.
Wo liegt das Problem?
Gruß,
Peter

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listobject und autofilter
22.07.2015 10:27:10
P-Quest
Ich vergaß:
Der Fehler wird ausglöst durch die Zeile
.autofilter.filtermode=true

AW: Listobject und autofilter
22.07.2015 10:41:05
Beverly
Hi Peter,
Sub AutoFilter()
Set ws = Worksheets("EinAus")
With ws.ListObjects("Bewegungen")
If Not .AutoFilter Is Nothing Then
.AutoFilter.ShowAllData
Else
.Range.AutoFilter
End If
End With
End Sub


Anzeige
Danke und gleich eine weitere Frage
22.07.2015 10:56:43
P-Quest
Super. Die Logik von MS erschliesst sich mir zwar nicht immer, aber schön, dass es funktioniert.
Ich muss jetzt aber gleich, wie schon angekündigt, eine Frage anhängen.Wenn ich mit dem aangepassten Code weitermache, wird der Filter zwar in die Tabelle eingetragen, aber es werden keine Daten angezeigt. Gehe ich manuell in der Tabelle auf den Filter, sehe ich dort die Kriterien und wenn ich dann mit OK bestätige wird mir das Filterkriterium korrekt angezeigt.
Muss ich da noch eine Neuberechnung oder ein refresh anstossen?
Sub Uebertrag(vJahr, strName)
'Daten in neuen JA übertragen
Dim dtGJA As Date
Dim dtGJE As Date
Dim ws As Worksheet
dtGJA = "01.07." & vJahr
dtGJE = "30.06." & vJahr + 1
Set ws = Worksheets("EinAus")
'Quelle filtern und kopieren
With ws.ListObjects("Bewegungen")
If Not .AutoFilter Is Nothing Then
.AutoFilter.ShowAllData
Else
.Range.AutoFilter
End If
.Range.AutoFilter Field:=3, Criteria1:=">=" & dtGJA, Operator:=xlAnd, Criteria2:="

Anzeige
AW: Danke und gleich eine weitere Frage
22.07.2015 11:31:26
P-Quest
Es muss natürlich heissen:
...wird mir das Filterergebniss korrekt angezeigt

AW: Danke und gleich eine weitere Frage
22.07.2015 13:02:59
P-Quest
Lösung gefunden.
Das Datum in den Kriterien muss im US Format angegeben werden.
...Format(dtGJA, "MM-DD-YYY")...

AW: Danke und gleich eine weitere Frage
22.07.2015 13:04:47
Beverly
So richtig ist mir nun nicht klar was du meinst.
Das Filtern von Datumswerten ist nicht ganz problemlos. Definiere die Variablen mal als String und nicht als Date - vlt. hilft das.


Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listobject und Autofilter in VBA


Schritt-für-Schritt-Anleitung

  1. Überprüfen, ob der Autofilter aktiviert ist: Du kannst den Status des Autofilters in einem ListObject mit der Eigenschaft .FilterMode überprüfen.

    If .AutoFilter.FilterMode = True Then
       .AutoFilter.ShowAllData
    Else
       .Range.AutoFilter
    End If
  2. Aktivieren des Autofilters: Wenn der Autofilter nicht aktiviert ist, kannst du ihn mit .Range.AutoFilter einschalten.

  3. Festlegen von Filterkriterien: Um Daten zu filtern, verwende die Methode .AutoFilter mit den entsprechenden Kriterien.

    .Range.AutoFilter Field:=3, Criteria1:=">=01-01-2023"
  4. Daten kopieren: Nach dem Setzen der Filterkriterien kannst du die gefilterten Daten kopieren oder weiterverarbeiten.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn du die Zeile .AutoFilter.FilterMode = True verwendest, führt das zu einem Fehler, da .FilterMode nur gelesen werden kann. Stattdessen solltest du die oben erwähnte Überprüfung mit If Not .AutoFilter Is Nothing verwenden.

  • Kein Daten angezeigt: Wenn du Filterkriterien festlegst, aber keine Daten angezeigt werden, stelle sicher, dass das Datumsformat korrekt ist. In VBA kann das US-Format (MM-DD-YYYY) erforderlich sein, um korrekt gefiltert zu werden.


Alternative Methoden

  • Direktes Arbeiten mit Excel-Objekten: Anstatt über VBA zu gehen, kannst du auch die Filteroptionen direkt in der Excel-Oberfläche verwenden, um zu sehen, wie die Filterkriterien funktionieren.

  • Verwendung von Named Ranges: Manchmal kann die Verwendung von benannten Bereichen anstelle von ListObjects einfacher sein, insbesondere wenn du keine komplexen Datenstrukturen hast.


Praktische Beispiele

Hier ist ein Beispiel für einen vollständigen VBA-Code, der den Autofilter verwendet:

Sub AutoFilterBeispiel()
    Dim ws As Worksheet
    Set ws = Worksheets("EinAus")

    With ws.ListObjects("Bewegungen")
        If Not .AutoFilter Is Nothing Then
            .AutoFilter.ShowAllData
        Else
            .Range.AutoFilter
        End If

        ' Beispiel für das Setzen eines Datumsfilters
        .Range.AutoFilter Field:=3, Criteria1:=">=01-01-2023"
    End With
End Sub

In diesem Beispiel wird der Autofilter aktiviert, und es wird nach einem bestimmten Datum gefiltert.


Tipps für Profis

  • Verwende Try...Catch-Mechanismen: Um Fehler zu vermeiden, solltest du deine VBA-Skripte mit Fehlerbehandlungsroutinen ausstatten.

  • Schau dir .ShowAllData an: Wenn du mit gefilterten Daten arbeitest, kann .ShowAllData nützlich sein, um alle Daten anzuzeigen, bevor du neue Filter anwendest.

  • Optimiere deinen Code: Reduziere die Anzahl der Zugriffe auf Excel-Objekte, indem du Werte in Variablen speicherst, um die Ausführungsgeschwindigkeit zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Autofilter in einem ListObject funktioniert?
Stelle sicher, dass dein ListObject korrekt referenziert ist und der Autofilter aktiviert ist. Verwende die Methode .ShowAllData, um alle gefilterten Daten anzuzeigen.

2. Warum wird mein gefiltertes Ergebnis nicht angezeigt?
Überprüfe die Kriterien und das Datumsformat. In VBA muss das Datum möglicherweise im US-Format angegeben werden, z. B. MM-DD-YYYY.

3. Was ist der Unterschied zwischen FilterMode und AutoFilterMode?
FilterMode zeigt an, ob ein Filter aktiv ist, während AutoFilterMode anzeigt, ob der Autofilter aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige