Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

AutoFilter via makro ein und aus

124 views
Skip to first unread message

Chris

unread,
Aug 30, 2010, 6:50:26 PM8/30/10
to
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

Andreas Killer

unread,
Aug 31, 2010, 9:38:01 AM8/31/10
to

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

Eberhard Funke

unread,
Aug 31, 2010, 2:54:45 PM8/31/10
to
Am Tue, 31 Aug 2010 00:50:26 +0200 schrieb Chris:

[in microsoft.public.de.excel]

> 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.
>

Hallo Chris,

Dein Code wäre u. U. hilfreich für's Verstehen des Problems gewesen.

Falls Du eine Verzweigung der Art
If Sheets(1).Range("B1").AutoFilter Then
eingebaut hast: das "Sheets(1).Range("B1").AutoFilter" wird *ausgeführt*,
es kommt nicht zu einer Verzweigung.

Lass folgendes Makro mal laufen und achte auf die Pfeile des AF und auf die
Meldungen.

Sub test()
If ActiveSheet.AutoFilterMode Then
MsgBox "B1 hat AF"
Else
MsgBox "B1 hat kein AF"
End If
'die folgende Zeile schaltet den AF ein/aus
If Sheets(1).Range("B1").AutoFilter Then
If ActiveSheet.AutoFilterMode Then
MsgBox "B1 hat AF"
Else
MsgBox "B1 hat kein AF"
End If
MsgBox "Verzweigung 1"
Else
'diese Verzweigung 2 wird nie erreicht!
MsgBox "Verzweigung 2"
End If
End Sub

Zu Autofilter & VBA siehe auch
http://www.contextures.com/xlautofilter03.html

[crossposted in microsoft.public.de.excel &
de.comp.office-pakete.ms-office.excel]

--
Mit freundlichen Grüssen Eberhard
XP home XL 2000

0 new messages