mich beschäftigen gerade Variable und Autofilter und benötige von Euch etwas Hilfe:
Gegeben sind sind die Tabellen "Kernzeitliste" und "Filter". In der Kernzeitliste soll per Makro eine Abfolge von Autofiltern gesetzt werden und anschließend die Liste ausgedruckt werden. Die Abfolge und der Inhalt der Autofilter ergibt sich aus einer Matrix (5 Spalten x 30 Zeilen) in der Tabelle Filter. Der Autofilter kann also mit bis zu 5 Kriterien gefüllt werden, es können aber auch nur 3 sein.
Und an dieser Stelle benötige ich Eure Hilfe.
Wenn 5 Kriterien übergeben werden funktioniert mein Makro, werden aber weniger Kriterien übergeben, so filtert der Autofilter auch alle leeren Zellen.
1. Wie kann ich verhindern, dass Variable mit dem Wert "" an den Autofilter übergeben werden und dadurch alle leeren Zellen gefiltert werden?
2. Kann ich das array für criteria1 auch in der Art array(astrJGKL(1 to 5)) definieren? Ich habe es nur durch einzelne Aufführen aller Variablen geschafft.
3. Alle verwendeten Werte für den Autofilter sollen auch auf der Liste in L2 eingetragen werden. Dies würde ich gerne in auch so gestalten, dass bei 3 Werten, dort auch nur 3 erscheinen und nicht 1, 2, 3,,,. Tip?
(Für jegliche weitere Verbesserungsvorschläge des Makros bin ich übrigens dankbar!)
Danke schon mal, Felix
Hier das Makro:
Sub Kernzeitlisten_Drucken()
Dim astrJGKL(1 To 5) As String
Dim istrJG As Long
Dim ReportIndex As Byte
' Alle Filter zurücksetzen
With Worksheets("Kernzeitliste")
If .FilterMode Then .ShowAllData
End With
'Variable füllen
For ReportIndex = 1 To 30
For ilngJG = 1 To 5
Worksheets("Filter").Activate
astrJGKL(ilngJG) = Cells(5 + ReportIndex, 6 + ilngJG).Value
Next
' Prüfen ob erste Variable leer ist
If astrJGKL(1) "" Then
'Filtern
Worksheets("Kernzeitliste").Activate
ActiveSheet.Range("$A$4:$L$4").autofilter Field:=2, Criteria1:=Array(astrJGKL(1) _
_
, astrJGKL(2), astrJGKL(3), astrJGKL(4), astrJGKL(5)), Operator:=xlFilterValues
' Text eintragen auf Liste
ActiveSheet.Range("L2").Value = astrJGKL(1) & ", " & astrJGKL(2) & ", " & _
astrJGKL(3) & ", " & astrJGKL(4) & ", " & astrJGKL(5)
'Drucken
ActiveSheet.PrintOut IgnorePrintAreas:=False
End If
Next
' Alle Filter zurücksetzen
With Worksheets("Kernzeitliste")
If .FilterMode Then .ShowAllData
End With
End Sub