Autofiltereinträge mittels VBA abfragen und drucken

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Highnoon.

    Autofiltereinträge mittels VBA abfragen und drucken

    Hallo Forum!

    Nach langem lesen hier im Forum musste ich mich jetzt doch mal registrieren um auch ein Thema erstellen zu können. Ich habe schon Tage mit der Suche und VBA Code
    verbracht aber komme einfach nicht zum Ergebnis. Ich beginne zu glauben dass es nicht möglich ist den Autofilter mit VBA so zu nutzen wir ich das gerne hätte.
    Zu meinem Problem:

    Ich habe eine Excel 2010 Datei (siehe Anhang) wo die ersten vier Zeilen einige allg. Informationen beinhalten, in der fünften Zeile Überschriften der einzelnen Spalten (A-D) und der Autofilter (auch von Spalte A-D) ist aktiviert. Ab Zeile 6 stehen die Informationen die gefiltert werden sollen. Diese sind immer anders und wechseln Täglich. In Spalte C stehen immer
    Namen, daher ist für mich der Autofilter der Spalte C interessant. Ich möchte alle Einträge des Autofilters (von Spalte C | also etwa Selection.AutoFilter Field:=3) nacheinander abfragen. Also quasi den ersten Eintrag vom Autofilter aktivieren, dann die Filterung ausdrucken und anschliessend den nächsten Autofilter Eintrag auswählen, drucken usw.

    Bisher kann ich über .Autofilter.Criteria1 immer nur einen direkten Eintrag (also wenn ich den schon weiß) auswählen. Die dort erscheinenden Namen sind aber immer anders.

    Ich hoffe ich habe das einigermaßen verständlich erklärt.
    Wäre schön wenn jemand einen Einfall hat.

    Meine Idee wäre eine Schleife. Also erstmal abfragen wiviele Einträge im Autofilter vorhanden sind, dann den ersten Eintrag auswählen, gesamtes Arbeitsblatt auswählen, drucken und immer so weiter bis der letzte Eintrag kommt. Dann Schleife verlassen und alle Einträge wieder anzeigen.

    Danke und Gruß

    Das Array ist die Lösung

    So, ich habe das Problem mit einem Array lösen können. Die VBA Hilfe fand ich hingegen überhaupt nicht hilfreich.
    Für alle die ein ähnliches Problem haben hier der Code:

    Visual Basic-Quellcode

    1. Dim i As Long, u As Long, z As Integer, r As Integer
    2. Dim ws As Worksheet
    3. Dim FeldArray()
    4. Set ws = Worksheets(1)
    5. ReDim Preserve FeldArray(ws.Autofilter.Range.Rows.Count, ws.Autofilter.Range.Columns.Count)
    6. r = 1
    7. 'Variable i beinhaltet die Anzahl der Reihen des Autofilterbereiches
    8. For i = 1 To ws.Autofilter.Range.Rows.Count
    9. 'Der erste Spaltenwert eines Filters wird ohne Prüfung in den Array eingetragen,
    10. 'da dieser noch nicht Doppelt sein kann
    11. If i = 1 Then
    12. FeldArray(i, u) = ws.Autofilter.Range.Cells(i, u)
    13. Else
    14. For z = 1 To i - 1
    15. 'Prüfung Zelle Autofilter mit den Werten im Array
    16. If ws.Autofilter.Range.Cells(i, u) = FeldArray(z, u) Then
    17. GoTo Weiter
    18. End If
    19. Next z
    20. r = r + 1
    21. 'Array wird erweitert
    22. FeldArray(r, u) = ws.Autofilter.Range.Cells(i, u)
    23. Weiter:
    24. End If
    25. Next i


    Nun sind alle Werte im Array und ich kann z.B. mit

    Visual Basic-Quellcode

    1. Selection.Autofilter Field:=1, Criteria1:=FeldArray(u, 1)


    den Autofilter anweisen oder das ganze, so wie bei mir, mit einer for...next Schleife automatisieren.

    Gruß