ich möchte gerne per VBA den Autofilter setzen. Er soll mir jeden Eintrag holen, der das Wort "Fleisch" oder "Fisch" enthält.
In meiner Spalte B steht (string, durch Leerzeichen getrennt)
2 Obst
3 Fleisch
4 Aufschnitt Fleisch
5 Gemüse
6 Aufschnitt Fisch
7 Fisch Konserve
8 Gemüse
9 Fisch
Ich möchte, dass der Filter die Zeilen 3,4,6,7,9 findet.
Der Rekorder schmeist dafür dieses raus, das auch funktioniert
ActiveSheet.Range("$A$1:$B$70").AutoFilter Field:=2, Criteria1:= _
"=*Fleisch*", Operator:=xlOr, Criteria2:="=*Fisch*"
Jetzt möchte ich das aber über eine Userform etwas anwenderfreundlicher haben. Der User soll in einer ListBox mit multiselect die Filterkriterien zusammenclicken.
Dazu benutze ich folgenden Code:
Sub HoleGefilterte()
Dim saFilter(9999) As String
Dim iFilter As Integer
For iFilter = 0 To Me.ListBox_Filter.ListCount - 1
If Me.ListBox_Filter.Selected(iFilter) Then
saFilter(iFilter) = Me.ListBox_Filter.List(iFilter)
End If
Next iFilter
Sheet2.Range("$A$1:$B$1").AutoFilter Field:=2, Criteria1:=Array(saFilter), Operator:= _
xlFilterValues
End Sub
Das Problem ist, wenn ich "Fisch" und "Fleisch" anwähle findet der Filter im Beispiel nur Zeile 2 und Zeile 9, aber nicht die kombinierten Einträge.
Den Suchstring wie in der Makrovorlage um Sterne zu erweitern
saFilter(iFilter) = "*" & Me.ListBox_Filter.List(iFilter) & "*"
habe ich probiert, dann findet er zwar kombinierte Einträge, aber nur für die erste Listboxauswahl.
Den Zusatz
, Operator:=xlOr, Criteria2:=
des Makrorekorders möchte ich nicht benutzen müssen, da ich statt zwei auch drei oder dreihundert Kriterien zulassen möchte.
Wie überzeuge ich den Autofilter, das zu machen was ich möchte?
(Nebenschauplatz: ich hab das Array saFilter auf 9999 dimensioniert, damit es auf jedem Fall reicht. Kann ich das auch dynamisch auf die benötigte Länge dimensionieren?)
Grüße,
Klaus M.vdT.
Ein schnelles "geht nicht" als Antwort würd mir schon reichen ... dann muss ich das mit Zeilenweisem ausblenden machen und auf den schnellen Autofilter verzichten. Aber es währ schon klasse, wenn ich den Code so zum laufen bekomme ..