Rubrik: Excel | VB-Versionen: VBA | 02.03.03 |
Excel-Autofilter mit Makros steuern Dieses Beispiel zeigt, wie sich die Autofilterfunktion in Excel innerhalb eines Makros nutzen lässt. | ||
Autor: Ralf Hähnel | Bewertung: | Views: 71.553 |
www.hippsoft.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Mit ein paar Mausklicks lässt sich in Excel recht schnell eine Liste durch die Autofilterfunktion auf die wesentlichen Punkte eingrenzen. Was aber, wenn die Autofilterfunktion in einem Makro genutzt werden soll?
Die Lösung bietet der VBA-Befehl Autofilter. Dieser Befehl hat jedoch die Sonderheit, den Status des Autofilters einfach nur umzudrehen. So schaltet er ihn also ein wenn er vorher aus war und dementsprechend auch wieder aus wenn er aktiv ist. Hier brauch's also einer weiteren Überprüfung, damit der gewünschte Zustand überhaupt eingestellt werden kann. Auch für die notwendige Überprüfung gibt es eine VBA-Funktion AutoFilterMode. Diese Funktion liefert TRUE, falls der Autofilter aktiviert ist. Mit beiden VBA-Befehle kann nun ohne große Schwierigkeiten den Autofilter ein- und ausschalten.
Damit die Aktivierung des Autofilters funktioniert, müssen einige Voraussetzungen beachtet werden:
- es muss eine Arbeitsmappe aktiv sein
- die aktive Arbeitmappe darf nicht minimiert sein
- das aktuelle Arbeitsblatt muss ein Tabellenblatt sein
- der Inhalt des aktuellen Arbeitsblattes darf nicht geschützt sein
- es müssen unbedingt Zellen markiert sein
- die Markierung darf nur aus einem zusammenhängenden Bereich bestehen
- die Markierung muss mindestens eine nichtleere Zelle beinhalten
Mit folgendem Code können Sie den Autofilter ein- und wieder ausschalten.
Die Kommentierung im Code selbst sollte alles ausreichend erklären.
' Diese Methode aktiviert den Excel-Autofilter Sub Autofilter_Activate() Dim Zelle As Range ' Prüft, ob eine Arbeitsmappe aktiv ist, wenn nicht ' wird eine Meldung ausgegeben und die SUB verlassen If ActiveWindow Is Nothing Then MsgBox "Autofilter-Funktionen können nur in Arbeitsmappen verwendet werden!" Exit Sub End If ' Prüft, ob die aktive Arbeitmappe minimiert ist, wenn ja ' wird eine Meldung ausgegeben und der SUB verlassen If ActiveWindow.WindowState = xlMinimized Then MsgBox "Autofilter-Funktionen können nur in sichtbaren und " & _ "nicht minimierten Arbeitsmappen verwendet werden!" Exit Sub End If ' Prüft, das aktuelle Arbeitsblatt ein Tabellenblatt ist, ' wenn nicht wird eine Meldung ausgegeben und die SUB verlassen If ActiveSheet.Type <> xlWorksheet Then MsgBox "Autofilter-Funktionen sind nur in Tabellenblättern möglich.!" Exit Sub End If ' Prüft, ob der Inhalt des aktuellen Arbeitsblattes ' geschützt wurde, wenn ja wird eine Meldung ausgegeben ' und dier SUB verlassen If ActiveSheet.ProtectContents Then MsgBox "Der Inhalt der Arbeitsblattes ist geschützt. " & _ "Die Autofilter-Funktionen kann nicht ausgeführt werden!" Exit Sub End If ' Prüft, ob bereits ein Autofilter auf dem aktuellen ' Arbeitsblatt aktiv ist, wenn ja wird eine Meldung ' ausgegeben und die SUB verlassen If ActiveSheet.AutoFilterMode Then MsgBox "Sie dürfen pro Blatt maximal 1 Autofilter aktiviert!" Exit Sub End If ' prüft, ob die Markierung ein Zellenbereich ist, wenn nicht ' wird eine Meldung ausgegeben und die SUB verlassen If TypeName(Selection) <> "Range" Then MsgBox "Bitte markieren Sie einen Zellenbereich!" Exit Sub End If ' Prüft, ob eine Mehrfach-Markierung vorhanden ist, wenn nicht ' wird eine Meldung ausgegeben und die SUB verlassen If Selection.Areas.Count > 1 Then MsgBox "Wählen Sie bitte nur einen Bereich aus!" Exit Sub End If ' Prüft, ob die markierten Zellen Werte enthalten, ' sobald eine Zelle nicht leer ist, wird der ' Autofilter aktiviert und die SUB verlassen For Each Zelle In Selection If IsEmpty(Zelle) = False Then Selection.AutoFilter Exit Sub End If Next Zelle ' sämtliche markierte Zellen sind leer --> Meldung MsgBox "Bitte Bereich markieren und Daten eingeben!" End Sub
' Diese Methode schaltet den Excel-Autofilter wieder ab Sub Autofilter_Deactivate() ' Prüft, ob eine Arbeitsmappe aktiv ist, wenn nicht ' wird eine Meldung ausgegeben und die SUB verlassen If ActiveWindow Is Nothing Then MsgBox "Autofilter-Funktionen können nur in Arbeitsmappen verwendet werden!" Exit Sub End If ' Prüft, ob die aktive Arbeitmappe minimiert ist, wenn ja ' wird eine Meldung ausgegeben und der SUB verlassen If ActiveWindow.WindowState = xlMinimized Then MsgBox "Autofilter-Funktionen können nur in sichtbaren und " & _ "nicht minimierten Arbeitsmappen verwendet werden!" Exit Sub End If ' Prüft, das aktuelle Arbeitsblatt ein Tabellenblatt ist, ' wenn nicht wird eine Meldung ausgegeben und die SUB verlassen If ActiveSheet.Type <> xlWorksheet Then MsgBox "Autofilter-Funktionen sind nur in Tabellenblättern möglich.!" Exit Sub End If ' Prüft, ob der Inhalt des aktuellen Arbeitsblattes ' geschützt wurde, wenn ja wird eine Meldung ausgegeben ' und die SUB verlassen If ActiveSheet.ProtectContents Then MsgBox "Der Inhalt der Arbeitsblattes ist geschützt. " & _ "Die Autofilter-Funktionen kann nicht ausgeführt werden!" Exit Sub End If ' Prüft, ob ein Autofilter aktiv ist, wenn nicht ' wird eine Meldung ausgegeben und die SUB verlassen If ActiveSheet.AutoFilterMode = False Then MsgBox "Kein Autofilter aktiviert!" Exit Sub End If ' Autofilter deaktivieren ActiveSheet.Cells.AutoFilter End Sub