|
Option Explicit
'Globale Variablen deklarieren. Global deswegen, damit man im gesamten VBA-Projekt _
auf die Variablen und deren gespeicherten Werte zurückgreifen, um den aktuell _
gespeicherten Wert zu ermitteln, kann.
Public iFilterRow As Integer
Public iFilterColumn As Integer
Dim iLastRow As Long
Sub Autofilter_zurück()
Dim iFilterColumnPrüf As Filter
'letzte Zeile in einem bestimmten Bereich, hier B bis D, ermitteln
iLastRow = Range("B:D").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
'Bei Auftreten eines Fehlers, weil z.B. die Variable "iFilterColumn" den _
Wert 0 enthält, zur Sprungmarke "Errorhandler" springen
On Error GoTo errorhandler
'Autofilter auf Einstellung "Alle" stellen
Range("A1:C" & iLastRow).AutoFilter Field:=iFilterColumn
'Zelle, nach der gefiltert wurde, markieren, Zeile und Spalte kommen aus den _
beiden globalen Variablen "iFilterRow" und "iFilterColumn", die die _
Zeilennummer und die Spaltennummer enthalten, die beim Ausführen des Makros _
"Auofilter_aktive_Zelle" in diese Variablen geschrieben wurden
Cells(iFilterRow, iFilterColumn).Select
'Prozedur beenden
Exit Sub
'Sprungmarke "Errorhandler" definieren
errorhandler:
'In Variable "iFilterColumn" den Wert 0 schreiben
iFilterColumn = 0
'Wenn Autofilter im aktuellen Tabellenblatt aktiviert wurde, dann...
If ActiveSheet.AutoFilterMode Then
'...For/Each-Schleife starten um die Spalte, nach der gefiltert wurde, zu ermitteln
For Each iFilterColumnPrüf In ActiveSheet.AutoFilter.Filters
'Variable "iFilterColumn" um den Wert 1 erhöhen
iFilterColumn = iFilterColumn + 1
'Wenn es sich bei der Spalte, die aktuell durch die For/Each-Schleife angesprochen _
wird, um die Spalte handelt, bei der die Eigenschaft auf "On" steht, da nach dieser _
Spalte gefiltert wurde, dann...
If iFilterColumnPrüf.On Then
'...den Filter in dieser Spalte wieder auf "Alle" stellen
Range("A1:C" & iLastRow).AutoFilter Field:=iFilterColumn
'Abfrage Ende
End If
'Nächsten Schleifendurchlauf starten
Next
'Abfrage Ende
End If
End Sub
|