Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Die Excel/VBA-Beispiele

VBA-Begriff: AutoFilter-Objekt

Worksheets-Auflistung (Worksheet-Objekt)
AutoFilter-Objekt
Filters-Auflistung (Filter-Objekt)

Stellt die automatische Filterung für das angegebene Tabellenblatt dar.

Verwenden des AutoFilter-Objekts

Verwenden Sie die AutoFilter-Eigenschaft, um das AutoFilterObjekt zurückzugeben. Verwenden Sie die Filters-Methode, um eine Auflistung der einzelnen Spaltenfilter zurückzugeben. Verwenden Sie die Range-Methode, um das Range-Objekt zurückzugeben, das den gesamten gefilterten Bereich darstellt. Im folgenden Beispiel werden die Adresse und Filterkriterien für die aktuelle Filterung gespeichert und anschließend neue Filter angewendet.

Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub ChangeFilters()

Set w = Worksheets("Crew")
With w.AutoFilter
    currentFiltRange = .Range.Address
    With .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 With

w.AutoFilterMode = False
w.Range("A1").AutoFilter field:=1, Criteria1:="S"

End Sub

Zum Erstellen eines AutoFilter-Objekts für ein Tabellenblatt, müssen Sie die automatische Filterung für einen Bereich in dem Tabellenblatt entweder manuell oder mit Hilfe der AutoFilter-Methode des Range-Objekts aktivieren. Das folgende Beispiel verwendet die in Variablen auf Modulebene gespeicherten Werte des vorherigen Beispiels, um die ursprüngliche automatische Filterung für das Tabellenblatt "Crew" wieder herzustellen.

Sub RestoreFilters()
Set w = Worksheets("Crew")
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
    If Not IsEmpty(filterArray(col, 1)) Then
        If filterArray(col, 2) Then
            w.Range(currentFiltRange).AutoFilter field:=col, _
                Criteria1:=filterArray(col, 1), _
                    Operator:=filterArray(col, 2), _
                Criteria2:=filterArray(col, 3)
        Else
            w.Range(currentFiltRange).AutoFilter field:=col, _
                Criteria1:=filterArray(col, 1)
        End If
    End If
Next
End Sub