vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik: Excel   |   VB-Versionen: VBA02.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ähnelBewertung:     [ Jetzt bewerten ]Views:  69.776 
www.hippsoft.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10kein 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

Dieser Tipp wurde bereits 69.776 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel