Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1452to1456
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofilter und Variable

Autofilter und Variable
20.10.2015 20:37:25
Felix
Moin zusammen,
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter und Variable
21.10.2015 09:12:28
Luschi
Hallo Felix,
so sollte es aauch bei dir klappen:

Sub Kernzeitlisten_Drucken()
Dim astrJGKL(1 To 5) As String, arrText As String
Dim ilngJG As Long
'die nächste Dim-Anweisung erzeugt sinnlose Datenkonvertierung
'ReportIndex soll die Werte zwischen 1 und 30 annehmen.
'diese Zahlen haben aber den Standard-Datentyp 'Integer'
'also muß der Compiler die Zahlen von 1 bis 30 bei jedem Schleifendurchlauf
'in 'Byte' konvertieren, damit die Variable den Zahlenwert aufnehmen kann!!!
'Dim ReportIndex As Byte
'deshalb
Dim ReportIndex As Integer
' 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
arrText = ""
For ilngJG = 1 To 5
If astrJGKL(ilngJG)  "" Then
'nicht leere Array-Werte in 1 Textkette schreiben und
'durch Komma trennen!
arrText = arrText & astrJGKL(ilngJG) & ","
End If
Next
' Prüfen ob erste Variable leer ist
If Len(arrText) > 0 Then
'letztes Komma in Textkette entfernen
arrText = Left(arrText, Len(arrText) - 1)
'Filtern
Worksheets("Kernzeitliste").Activate
'die Textketten-Variable 'arrText' wird wieder in ein Array umgewandelt und ü _
bergeben
ActiveSheet.Range("A1").AutoFilter Field:=2, Operator:=xlFilterValues, _
Criteria1:=Split(arrText, ",", -1, vbTextCompare)
' Text eintragen auf Liste
ActiveSheet.Range("L2").Value = arrText
'Drucken
ActiveSheet.PrintOut IgnorePrintAreas:=False
'wichtig - siehe Vba-Hilfe
DoEvents
End If
Next
' Alle Filter zurücksetzen
With Worksheets("Kernzeitliste")
If .FilterMode Then .ShowAllData
End With
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Autofilter und Variable
22.10.2015 09:41:51
Felix
Danke Luschi,
habe alles getestet, funktioniert super!

AW: Autofilter und Variable
23.10.2015 20:00:02
Hajo_Zi
Warum Offen

AW: Autofilter und Variable
23.10.2015 21:36:38
Felix
Ups,
habe den Text neben dem Check-Kästchen nicht richtig gelesen...
Schönen abend noch,
Felix

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige