AutoFilter via makro ein und aus

31/08/2010 - 00:50 von Chris | Report spam
Hallo Zusammen.

Ich möchte den Autofilter in einer Zeile via Makro ein- oder ausblenden.
Nun stelle ich fest, das man den AutoFilter nur "umschalten" kann, von ein
auf aus oder umgekehrt.

Wenn man manuell den Filter aktiviert dann schaltet mein (einschalt) Makro
den Filter leider aus. Ein sicheres ein oder aus finde ich nicht.

Gibt es da doch eine Möglichkeit?
Evtl. auch um den Filter zu "aktualisieren", da eingefügte Daten ignoriert
werden selbst wenn keine Leerzellen dazwischen sind. Erst nach aus u.
einschalten des Filters arbeitet er wieder richtig.

danke
lg Chris

Excel 2000 v9.0
 

Lesen sie die antworten

#1 Andreas Killer
31/08/2010 - 15:38 | Warnen spam
Am 31.08.2010 00:50, schrieb Chris:

Ich möchte den Autofilter in einer Zeile via Makro ein- oder ausblenden.
Nun stelle ich fest, das man den AutoFilter nur "umschalten" kann, von ein
auf aus oder umgekehrt.

Wenn man manuell den Filter aktiviert dann schaltet mein (einschalt) Makro
den Filter leider aus. Ein sicheres ein oder aus finde ich nicht.

Gibt es da doch eine Möglichkeit?
Evtl. auch um den Filter zu "aktualisieren", da eingefügte Daten ignoriert
werden selbst wenn keine Leerzellen dazwischen sind. Erst nach aus u.
einschalten des Filters arbeitet er wieder richtig.


Ich hab nicht eine Idee was Du eigentlich machen willst, aber jede Menge Routinen. Ich denke es ist was passendes dabei. :-)

Andreas.

Sub AutofilterReSet()
'Filtert die Daten erneut mit dem momentanen Einstellungen
'Braucht man wenn man die Daten bei gesetztem Filter àndert
Dim F As Integer, R As Range
If Not ActiveSheet.AutoFilterMode Then Exit Sub
Set R = ActiveSheet.AutoFilter.Range
With ActiveSheet.AutoFilter.Filters
For F = 1 To .Count
With .Item(F)
If .On Then
If .Operator Then
R.AutoFilter Field:=F, Criteria1:=.Criteria1, Criteria2:=.Criteria2, Operator:=.Operator
Else
R.AutoFilter Field:=F, Criteria1:=.Criteria1
End If
End If
End With
Next
End With
End Sub

Sub AutofilterSelection()
AutofilterSelectionPrim True
End Sub

Sub AutofilterSelectionNot()
AutofilterSelectionPrim False
End Sub

Sub AutofilterSelectionPrim(ByVal Equal As Boolean)
'Setzt/erzeugt einen Autofilter über alle markierten Zellen
Dim R As Range, F As Filter, I As Long, A As AutoFilter
Dim C As String, O As XlAutoFilterOperator, V As Variant
'Sind Zellen markiert?
If Not TypeOf Selection Is Range Then Exit Sub
If Equal Then
C = ""
O = xlOr
Else
C = "<>"
O = xlAnd
End If
For Each R In Selection
V = R.Value
If IsNumeric(V) Then V = Replace(V, ",", ".")
'Ist ein Autofilter da?
If Not ActiveSheet.AutoFilterMode Then
'Feldnummer für den Filter berechnen
I = R.Column - R.CurrentRegion.Columns(1).Column + 1
'Erstellen und filtern
R.AutoFilter Field:=I, Criteria1:=C & V
Else
'Feldnummer für den Filter berechnen
I = R.Column - ActiveSheet.AutoFilter.Range.Column + 1
'Filter prüfen
With ActiveSheet.AutoFilter.Filters
'Den Filter holen
Set F = .Item(I)
'Filter an?
If F.On Then
'Haben wir schon einen Operator?
If F.Operator Then
'Tja, mehr als 2 gehen halt nicht. :-)
Else
'Nein, dann einen 2ten dazu setzen
R.AutoFilter Field:=I, Criteria1:=F.Criteria1, Criteria2:=C & V, Operator:=O
End If
Else
'Nein, diese Spalte filtern
R.AutoFilter Field:=I, Criteria1:=C & V
End If
End With
End If
Next
End Sub

Sub AutofilterFilternAus(Optional ByVal W As Worksheet = Nothing)
'Entfernt alle Filter aus dem Autofilter
If W Is Nothing Then Set W = ActiveSheet
If W.FilterMode Then W.ShowAllData
End Sub

Sub AutofilterAus(Optional ByVal W As Worksheet = Nothing)
'Entfernt den Autofilter aus einem Blatt
If W Is Nothing Then Set W = ActiveSheet
W.AutoFilterMode = False
End Sub

Sub AutofilterSpaltenAus()
'Entfernt die Filter in deren Spalten Zellen markiert sind
Dim F As Filter, R As Range, I As Integer
'Ist ein Filter da und sind Zelle(n) markiert?
If Not ActiveSheet.FilterMode Or _
Not TypeOf Selection Is Range Then Exit Sub

'Aktiven Filterbereich holen
Set R = ActiveSheet.AutoFilter.Range
'Alle Filter durchlaufen
For Each F In ActiveSheet.AutoFilter.Filters
'Mitzàhlen
I = I + 1
'Ist er an und schneidet sich der Bereich?
If F.On And Not Intersect(R.Columns(I).EntireColumn, Selection) Is Nothing Then
'Diesen Filter aus
R.AutoFilter I, Null
End If
Next
End Sub

Sub SaveCurrentAutofilter()
SaveAutofilter OurFilterArray
End Sub

Sub SaveAutofilter(ByRef FilterArray As Variant, Optional ByVal W As Worksheet = Nothing)
'Sichert die Filter eines Autofilters
Dim F As Integer
If W Is Nothing Then Set W = ActiveSheet
If Not W.AutoFilterMode Then Exit Sub
With W.AutoFilter.Filters
ReDim FilterArray(1 To .Count, 1 To 3)
For F = 1 To .Count
With .Item(F)
If .On Then
FilterArray(F, 1) = .Criteria1
If .Operator Then
FilterArray(F, 2) = .Operator
FilterArray(F, 3) = .Criteria2
End If
End If
End With
Next
End With
End Sub

Sub RestoreCurrentAutofilter()
RestoreAutofilter OurFilterArray
End Sub

Sub RestoreAutofilter(ByRef FilterArray As Variant, Optional ByVal W As Worksheet = Nothing)
'Stellt die Filter eines Autofilters wieder her
Dim I As Integer
If W Is Nothing Then Set W = ActiveSheet
If Not W.AutoFilterMode Then Exit Sub
If W.FilterMode Then W.ShowAllData
For I = 1 To UBound(FilterArray)
If Not IsEmpty(FilterArray(I, 1)) Then
If IsEmpty(FilterArray(I, 2)) Then
W.AutoFilter.Range.AutoFilter I, FilterArray(I, 1)
Else
W.AutoFilter.Range.AutoFilter I, FilterArray(I, 1), FilterArray(I, 2), FilterArray(I, 3)
End If
End If
Next
End Sub

Ähnliche fragen