Worksheets(Worksheets)![]() ![]() ![]() |
代表对指定工作表的自动筛选。
可用 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