Autofilter und Variable

Bild

Betrifft: Autofilter und Variable
von: Felix
Geschrieben am: 30.04.2015 16:14:19

Moin zusammen,
ich hoffe Ihr könnt mir bei der Optimierung meines Codes helfen. Im Prinzip funktioniert er, aber ich bin sicher, dass jemand von Euch mir Tips geben kann, wie ich die Aufgabe geschickter lösen kann.
Aufgabe:
Gegeben sind 2 Tabellen, die Wochenliste (WL) und Filterliste (FL). Aus der WL sollen max 30 Reports per Autofilter mit 2 Kriterien (Jahrgang und Klasse) erstellt werden. Die Kriterien sollen aus der Tabelle Filter aus den Spalten c + d definiert werden.
Meine Idee:
Ich definiere für jedes Feld der Spalten c + d eine Variable (insgesamt also 60). Diese übergebe ich dann entspechend zusammengehörig an die Autofilter und Drucke den Bericht. Wenn kein Wert mehr in einem Feld der Spalte c vorhanden ist, wird das nächste Feld der Spalte c überprüft usw, bis alle 30 möglichen Reports ggf. erstellt sind.
Frage:
Kann ich mir irgendwie die Definition von 60 Variablen sparen?
Wie können die 30 Abschnitte zum erstellen der Reports vereinfacht werden?
Sub WL_Drucken()
' Wochenliste Sortieren und Drucken
' BLATTSCHUTZ AUS
'Call Blattschutz_aus
' SORTIEREN

'Prüfen ob Filter schon zurückgesetzt in Sortieren Makro

' Alle Filter zurücksetzen
Dim WL_Filter As Integer
With ActiveSheet
For WL_Filter = 1 To 10 ' hier bitte die Anzahl der Spalten mit Filter eingeben
Selection.AutoFilter Field:=WL_Filter
Next
End With
'DEFINITION DER VARIABLEN
'Jahrgang - Definition der Variablen
Dim WLIDJG_01 As String
Dim WLIDJG_02 As String
Dim WLIDJG_03 As String
Dim WLIDJG_04 As String
Dim WLIDJG_05 As String
Dim WLIDJG_06 As String
Dim WLIDJG_07 As String
Dim WLIDJG_08 As String
Dim WLIDJG_09 As String
Dim WLIDJG_10 As String
Dim WLIDJG_11 As String
Dim WLIDJG_12 As String
Dim WLIDJG_13 As String
Dim WLIDJG_14 As String
Dim WLIDJG_15 As String
Dim WLIDJG_16 As String
Dim WLIDJG_17 As String
Dim WLIDJG_18 As String
Dim WLIDJG_19 As String
Dim WLIDJG_20 As String
Dim WLIDJG_21 As String
Dim WLIDJG_22 As String
Dim WLIDJG_23 As String
Dim WLIDJG_24 As String
Dim WLIDJG_25 As String
Dim WLIDJG_26 As String
Dim WLIDJG_27 As String
Dim WLIDJG_28 As String
Dim WLIDJG_29 As String
Dim WLIDJG_30 As String
'Jahrgang - Definition der Inhalte der Variablen
WLIDJG_01 = Worksheets("Filter").Range("C6")
WLIDJG_02 = Worksheets("Filter").Range("C7")
WLIDJG_03 = Worksheets("Filter").Range("C8")
WLIDJG_04 = Worksheets("Filter").Range("C9")
WLIDJG_05 = Worksheets("Filter").Range("C10")
WLIDJG_06 = Worksheets("Filter").Range("C11")
WLIDJG_07 = Worksheets("Filter").Range("C12")
WLIDJG_08 = Worksheets("Filter").Range("C13")
WLIDJG_09 = Worksheets("Filter").Range("C14")
WLIDJG_10 = Worksheets("Filter").Range("C15")
WLIDJG_11 = Worksheets("Filter").Range("C16")
WLIDJG_12 = Worksheets("Filter").Range("C17")
WLIDJG_13 = Worksheets("Filter").Range("C18")
WLIDJG_14 = Worksheets("Filter").Range("C19")
WLIDJG_15 = Worksheets("Filter").Range("C20")
WLIDJG_16 = Worksheets("Filter").Range("C21")
WLIDJG_17 = Worksheets("Filter").Range("C22")
WLIDJG_18 = Worksheets("Filter").Range("C23")
WLIDJG_19 = Worksheets("Filter").Range("C24")
WLIDJG_20 = Worksheets("Filter").Range("C25")
WLIDJG_21 = Worksheets("Filter").Range("C26")
WLIDJG_22 = Worksheets("Filter").Range("C27")
WLIDJG_23 = Worksheets("Filter").Range("C28")
WLIDJG_24 = Worksheets("Filter").Range("C29")
WLIDJG_25 = Worksheets("Filter").Range("C30")
WLIDJG_26 = Worksheets("Filter").Range("C31")
WLIDJG_27 = Worksheets("Filter").Range("C32")
WLIDJG_28 = Worksheets("Filter").Range("C33")
WLIDJG_29 = Worksheets("Filter").Range("C34")
WLIDJG_30 = Worksheets("Filter").Range("C35")
'Klassen - Definition der Variablen
Dim WLIDKL_01 As String
Dim WLIDKL_02 As String
Dim WLIDKL_03 As String
Dim WLIDKL_04 As String
Dim WLIDKL_05 As String
Dim WLIDKL_06 As String
Dim WLIDKL_07 As String
Dim WLIDKL_08 As String
Dim WLIDKL_09 As String
Dim WLIDKL_10 As String
Dim WLIDKL_11 As String
Dim WLIDKL_12 As String
Dim WLIDKL_13 As String
Dim WLIDKL_14 As String
Dim WLIDKL_15 As String
Dim WLIDKL_16 As String
Dim WLIDKL_17 As String
Dim WLIDKL_18 As String
Dim WLIDKL_19 As String
Dim WLIDKL_20 As String
Dim WLIDKL_21 As String
Dim WLIDKL_22 As String
Dim WLIDKL_23 As String
Dim WLIDKL_24 As String
Dim WLIDKL_25 As String
Dim WLIDKL_26 As String
Dim WLIDKL_27 As String
Dim WLIDKL_28 As String
Dim WLIDKL_29 As String
Dim WLIDKL_30 As String
'Jahrgang - Definition der Inhalte der Variablen
WLIDKL_01 = Worksheets("Filter").Range("D6")
WLIDKL_02 = Worksheets("Filter").Range("D7")
WLIDKL_03 = Worksheets("Filter").Range("D8")
WLIDKL_04 = Worksheets("Filter").Range("D9")
WLIDKL_05 = Worksheets("Filter").Range("D10")
WLIDKL_06 = Worksheets("Filter").Range("D11")
WLIDKL_07 = Worksheets("Filter").Range("D12")
WLIDKL_08 = Worksheets("Filter").Range("D13")
WLIDKL_09 = Worksheets("Filter").Range("D14")
WLIDKL_10 = Worksheets("Filter").Range("D15")
WLIDKL_11 = Worksheets("Filter").Range("D16")
WLIDKL_12 = Worksheets("Filter").Range("D17")
WLIDKL_13 = Worksheets("Filter").Range("D18")
WLIDKL_14 = Worksheets("Filter").Range("D19")
WLIDKL_15 = Worksheets("Filter").Range("D20")
WLIDKL_16 = Worksheets("Filter").Range("D21")
WLIDKL_17 = Worksheets("Filter").Range("D22")
WLIDKL_18 = Worksheets("Filter").Range("D23")
WLIDKL_19 = Worksheets("Filter").Range("D24")
WLIDKL_20 = Worksheets("Filter").Range("D25")
WLIDKL_21 = Worksheets("Filter").Range("D26")
WLIDKL_22 = Worksheets("Filter").Range("D27")
WLIDKL_23 = Worksheets("Filter").Range("D28")
WLIDKL_24 = Worksheets("Filter").Range("D29")
WLIDKL_25 = Worksheets("Filter").Range("D30")
WLIDKL_26 = Worksheets("Filter").Range("D31")
WLIDKL_27 = Worksheets("Filter").Range("D32")
WLIDKL_28 = Worksheets("Filter").Range("D33")
WLIDKL_29 = Worksheets("Filter").Range("D34")
WLIDKL_30 = Worksheets("Filter").Range("D35")
'REPORTS FILTERN UND DRUCKEN
REPORT_ID01:
'Prüfen ob Zelle leer
If WLIDJG_01 = "" Then
GoTo REPORT_ID02
'Text in Reportbeschriftung eintragen
Else: Range("J2") = WLIDJG_01 & " - " & WLIDKL_01
End If
'Filtern
Selection.AutoFilter Field:=2, Criteria1:=WLIDJG_01
Selection.AutoFilter Field:=3, Criteria1:=WLIDKL_01
'Drucken
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
REPORT_ID02:
'Prüfen ob Zelle leer
If WLIDJG_02 = "" Then
GoTo REPORT_ID03
'Text in Reportbeschriftung eintragen
Else: Range("J2") = WLIDJG_02 & " - " & WLIDKL_02
End If
'Filtern
Selection.AutoFilter Field:=2, Criteria1:=WLIDJG_02
Selection.AutoFilter Field:=3, Criteria1:=WLIDKL_02
'Drucken
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Report_ID03:
USW...
Besten Dank schon mal,
Felix

Bild

Betrifft: AW: Autofilter und Variable
von: Nepumuk
Geschrieben am: 30.04.2015 17:39:10
Hallo,
teste mal:

Option Explicit

Public Sub WL_Drucken()
    
    ' Wochenliste Sortieren und Drucken
    
    'DEFINITION DER VARIABLEN
    Dim astrWLIDJG(1 To 30) As String
    Dim astrWLIDKL(1 To 30) As String
    Dim ialngIndex As Long
    
    ' Alle Filter zurücksetzen
    With Worksheets("Wochenliste")
        If .FilterMode Then .ShowAllData
    End With
    
    'Jahrgang - Definition der Inhalte der Variablen
    With Worksheets("Filter")
        For ialngIndex = 1 To 30
            astrWLIDJG(ialngIndex) = .Cells(ialngIndex + 5, 3).Value
            astrWLIDKL(ialngIndex) = .Cells(ialngIndex + 5, 4).Value
        Next
    End With
    
    'REPORTS FILTERN UND DRUCKEN
    With Worksheets("Wochenliste")
        
        For ialngIndex = 1 To 30
            
            'Prüfen ob Zelle leer
            If astrWLIDJG(ialngIndex) <> "" Then
                
                'Text in Reportbeschriftung eintragen
                .Range("J2").Value = astrWLIDJG(ialngIndex) & " - " & astrWLIDKL(ialngIndex)
                
                'Filtern ******* erste Zeile des Autofilters eventuell anpassen ********
                With .Rows(2)
                    .AutoFilter Field:=2, Criteria1:=astrWLIDJG(ialngIndex)
                    .AutoFilter Field:=3, Criteria1:=astrWLIDKL(ialngIndex)
                End With
                
                .PrintOut IgnorePrintAreas:=False
                
            End If
        Next
    End With
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Autofilter und Variable
von: Werner
Geschrieben am: 30.04.2015 19:52:57
Hallo Nepumuk,
damit hast du mir auch weiter geholfen, auch wenn bei mir derzeit kein ähnliches Problem ansteht. Ich lese hier häufig mit und versuche die Fragen für mich zu lösen. Mein VBA steckt noch in den Kinderschuhen. Da hast du mir auch zu einem Aha-Erlebnis verholfen.
Gruß Werner

Bild

Betrifft: AW: Autofilter und Variable
von: Felix
Geschrieben am: 01.05.2015 12:52:31
Hallo Nepumuk,
besten Dank. Das war genau die Art von Verbesserungsvorschlag, die ich gemeint hatte. Ich werde mich am Wochenende mal damit beschäftigen.
Grüsse,
Felix

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Autofilter und Variable"