AutoFilter 对象

         
Worksheets(Worksheets)
AutoFilter
Filters (Filter)

代表对指定工作表的自动筛选。

AutoFilter 对象的用法

可用 AutoFilter 属性返回 AutoFilter 对象。使用 Filters 方法可返回由各个列筛选组成的集合。使用 Range 方法可返回 Range 对象,该对象代表整个筛选区域。下例将保存当前筛选的地址和筛选条件,然后应用新的筛选。

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

若要为工作表创建一个 AutoFilter 对象,必须先手动或使用 Range 对象的 AutoFilter 方法打开工作表上某个区域上的筛选。下例将使用存储在上例模块级变量中的值来为“Crew”工作表恢复最初的自动筛选。

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