Hallo Ewald,
Am Mon, 14 Sep 2015 23:26:02 -0700 (PDT) schrieb Ewald:
> Ich glaube ich kann mein Problem nicht richtig ausdrücken., das darin besteht, daß ich es bei mehreren Kriterien nicht schaffe, den Filter wieder zusammen zu setzen. Bsp. Filtern nach Apfel und Banane. Ich lese aus:
> c1= Apfel op=2 c2=Banane
> sehe ich mir das im AutoFilter vor dem Auslesen an sieht es so aus:
> bei 2 Filtern: Ist gleich "Apfel" oder Ist gleich "Banane"
> bei 3 oder mehr Filtern: Ist gleich "Apfel; Banane; Kiwi" ...
was dir bei MouseOver als Filter angezeigt wird und was dir in die
Zellen geschrieben wird sind unterschiedliche Sachen.
Probiere mal zum Auslesen des Filters folgenden Code:
Public c1 As Variant, c2 As Variant, op As String
Sub Filterkriterien_sichern()
Dim f As Variant
Const ns As String = ""
With ActiveSheet
For Each f In .AutoFilter.Filters
If f.On Then
c1 = f.Criteria1
If IsArray(c1) Then
op = f.Operator
ElseIf f.Operator > 0 Then
c1 = f.Criteria1
op = f.Operator
c2 = f.Criteria2
End If
Else
c1 = ns
op = ns
c2 = ns
End If
.Range("B20:B22").ClearContents
If IsArray(c1) Then
.Range("B20") = Right(Join(c1), Len(Join(c1)) - 1)
Else
.Range("B20") = Right(c1, Len(c1) - 1)
End If
.Range("B21") = op
If Not IsEmpty(c2) Then
.Range("B22") = Right(c2, Len(c2) - 1)
End If
Next
End With
End Sub
Jetzt kommt es darauf an, wie bzw. wann du die Kriterien zurückschreiben
möchtest. Ist die Mappe immer noch geöffnet, kannst du das mit den
Public Variablen machen, denn die bleiben erhalten, solange nicht
geschlossen wird:
Sub FilterSetzen1() 'Mit den public Variablen
If op <> "" Then
ActiveSheet.Range("B1").AutoFilter field:=1, Criteria1:=c1, _
Operator:=op, Criteria2:=c2
Else
ActiveSheet.Range("B1").AutoFilter field:=1, Criteria1:=c1
End If
End Sub
Wenn du die Mappe geschlossen hast und den Filter über die Zellbezüge
setzen willst, dann probiere es so:
Sub FilterSetzen2() 'Mit den Zellbezügen
Dim crit1 As Variant, crit2 As String, op As String
If InStr(Range("B20"), " =") Then
crit1 = Split(Range("B20"), " =")
Else
crit1 = "=" & Range("B20")
End If
crit2 = IIf(Len(Range("B22")) > 0, "=" & Range("B22"), "")
op = Range("B21")
With ActiveSheet.Range("B1")
If crit2 = "" Then
.AutoFilter field:=1, Criteria1:=crit1
Else
.AutoFilter field:=1, Criteria1:=crit1, _
Operator:=op, Criteria2:=crit2
End If
End With
End Sub