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:
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 Dieser Tipp wurde bereits 71.517 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |