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

Forumthread: VBA Auto-Filter - Fehlermeldung

VBA Auto-Filter - Fehlermeldung
09.07.2019 11:48:58
Kevin
Hallo zusammen,
ich habe eine Frage bezgl. des Auto-Filters.
Ich nutze eine Excel immer als "Sammelplatz" um CSV-Dateien einzuspielen,
das Problem ist das der Name der CSV-Datei immer ein anderer ist.
Wie kann ich folgendes Makro so umschreiben, damit es generell das vorhandene Arbeitsblatt unabhängig vom Namen nach u.s. Kriterien filtert?

Sub Filtern()
' Filtern Makro
Columns("F:G").Select
Range("G1").Activate
Selection.Delete Shift:=xlToLeft
Columns("B:D").Select
Range("D1").Activate
Selection.Delete Shift:=xlToLeft
Range("A3").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("DB.csv").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("DB.csv").AutoFilter.Sort.SortFields.Add2 Key:= _
Range("A1:A4910"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("DB.csv").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Angezeigt wird immer der "Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt".
Habe nur begrenzte VBA-Kenntnisse...
Vielen Dank im Voraus für eure Hilfe!
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Auto-Filter - Fehlermeldung
09.07.2019 12:35:49
Regina
Moin,
Du könntest mit ActiveSheet arbeiten.
D.h.
neue Variable:
Dim str_blattname as String
str_blattname = Activesheet.Name
dann im Quellcode beim AutoFilter "DB.csv" komplett durch str_blattname (ohne Anführungszeichen!) ersetzen.
Das nächste Problem könnte sein, dass Deine Listen unterschiedlich lang sind, Dein Code arbeitet nur bis Zeile 910. Ist es gewährleistet, dass die Listen nicht länhgger sind?
Gruß
Regina
Anzeige
AW: VBA Auto-Filter - Fehlermeldung
09.07.2019 13:04:54
Kevin
Hi Regina,
danke für die schnelle Rückmeldung, habe es ausprobiert aber es funktioniert noch nicht.
Der Code sieht nun wie folgt aus. Vermutlich habe ich es falsch eingefügt:

Sub Filtern()
' Filtern Makro
Dim str_blattname As String
str_blattname = ActiveSheet.Name
Columns("F:G").Select
Range("G1").Activate
Selection.Delete Shift:=xlToLeft
Columns("B:D").Select
Range("D1").Activate
Selection.Delete Shift:=xlToLeft
Range("A3").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets(str_blattname).AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets(str_blattname).AutoFilter.Sort.SortFields.Add2 Key:= _
Range("A1:A7000"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets(str_blattname).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Die Fehlermeldung kommt nach wie vor in folgender Zeile:
 ActiveWorkbook.Worksheets(str_blattname).AutoFilter.Sort.SortFields.Clear
Wie beschrieben, meine VBA-Kenntnisse halten sich in Grenzen...
Danke Dir im Voraus
Gruß
Kevin
Anzeige
AW: VBA Auto-Filter - Fehlermeldung
09.07.2019 13:11:58
Kevin
Hallo Uwe,
genau das ist es, VIELEN DANK!!
Auch nochmal danke an Regina!
Gruß
Kevin
Erklärung..
09.07.2019 13:49:45
UweD
Prima. Danke für die Rückmeldung.


Der Grund war sehr wahrscheinlich..
"Selection.AutoFilter" ...
schaltet den Filter je nach Zustand ein oder aus.
Wenn der Filter an war, wird hierdurch ausgeschaltet und dann
ist nichts da, was du mit ".AutoFilter.Sort.SortFields.Clear" löschen kannst.
LG UweD
Anzeige
AW: Erklärung..
09.07.2019 14:41:34
Kevin
Das ergibt Sinn, wieder was gelernt.
Danke Uwe!
Gruß
Kevin
AW: VBA Auto-Filter - Fehlermeldung
09.07.2019 12:56:16
UweD
Hallo
so?
Sub Filtern()
    Dim LR As Long
    With ActiveSheet
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte 
        .Columns("F:G").Delete Shift:=xlToLeft
        .Columns("B:D").Delete Shift:=xlToLeft
        If .AutoFilterMode Then .AutoFilterMode = False
        .Range("A3").AutoFilter
        With .AutoFilter.Sort
            .SortFields.Add2 Key:=Range("A1:A" & LR), SortOn:=xlSortOnValues, _
                Order:=xlDescending, DataOption:=xlSortTextAsNumbers
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
LG UweD
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Auto-Filter Fehlerbehebung in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Klicke auf "Einfügen" und wähle "Modul", um ein neues Modul zu erstellen.

  2. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub Filtern()
        Dim LR As Long
        With ActiveSheet
            LR = .Cells(.Rows.Count, "A").End(xlUp).Row ' Letzte Zeile der Spalte A
            .Columns("F:G").Delete Shift:=xlToLeft
            .Columns("B:D").Delete Shift:=xlToLeft
            If .AutoFilterMode Then .AutoFilterMode = False
            .Range("A3").AutoFilter
            With .AutoFilter.Sort
                .SortFields.Add2 Key:=Range("A1:A" & LR), SortOn:=xlSortOnValues, _
                Order:=xlDescending, DataOption:=xlSortTextAsNumbers
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    End Sub
  3. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle das Makro „Filtern“ aus und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn die Objektvariable nicht korrekt gesetzt ist. Stelle sicher, dass der Auto-Filter aktiv ist, bevor du versuchst, die Sortierfelder zu löschen.

  • Auto Filter nicht angewendet: Wenn der Auto Filter nicht angewendet wird, könnte das daran liegen, dass die Zeile, die du filterst, nicht korrekt ausgewählt ist. Überprüfe, ob die Range richtig definiert ist.

  • Auswahl.AutoFilter Fehler: Vermeide die Verwendung von Selection.AutoFilter, da dies den Filter möglicherweise deaktiviert. Stattdessen sollte .AutoFilter direkt auf das Arbeitsblatt angewendet werden.


Alternative Methoden

  • Verwendung von ActiveSheet: Anstatt den Arbeitsblattnamen direkt zu verwenden, kannst du ActiveSheet nutzen, um den Code flexibler zu gestalten. Dies ist besonders nützlich, wenn du mit verschiedenen CSV-Dateien arbeitest.

    Dim str_blattname As String
    str_blattname = ActiveSheet.Name
  • Automatische Zeilenanzahl: Um sicherzustellen, dass alle Daten berücksichtigt werden, kannst du die letzte Zeile dynamisch ermitteln, wie im obigen Schritt-für-Schritt-Beispiel.


Praktische Beispiele

Beispiel 1: Filtere eine Liste von Transaktionen nach Datum.

Sub FilterTransaktionen()
    With ActiveSheet
        If .AutoFilterMode Then .AutoFilterMode = False
        .Range("A1:D100").AutoFilter Field:=1, Criteria1:=">01.01.2023"
    End With
End Sub

Beispiel 2: Sortiere die gefilterten Daten aufsteigend.

Sub SortiereGefilterteDaten()
    With ActiveSheet.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B:B"), Order:=xlAscending
        .Apply
    End With
End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Um die Leistung zu verbessern, setze dies am Anfang deines Makros und aktiviere es am Ende wieder.

  • Fehlerbehandlung: Füge Fehlerbehandlung hinzu, um sicherzustellen, dass dein Makro auch bei unerwarteten Eingaben stabil bleibt.

    On Error Resume Next
  • Dokumentation: Kommentiere deinen Code gut, damit du nicht vergisst, was jeder Teil macht. Dies ist besonders wichtig, wenn du später Änderungen vornehmen möchtest.


FAQ: Häufige Fragen

1. Wie kann ich den Auto-Filter zurücksetzen? Du kannst den Auto-Filter zurücksetzen, indem du .AutoFilterMode = False auf dem Arbeitsblatt anwendest.

2. Gibt es eine Möglichkeit, den Filter nur auf bestimmte Spalten anzuwenden? Ja, du kannst den Auto-Filter nur auf bestimmte Spalten anwenden, indem du die Range in der .AutoFilter Methode entsprechend anpasst.

3. Warum funktioniert mein VBA Auto-Filter nicht? Überprüfe, ob der Auto-Filter korrekt aktiviert ist und ob du die richtige Range sowie die korrekten Filterkriterien verwendest.

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