我正在寻找一种循环excel过滤器标准的方法,该过滤器没有任何过滤掉的东西(即所有标准都已启用)。当过滤器处于活动状态时,所有条件都将添加到数组类型的东西中,可以通过以下方式访问:
for each criteria in ActiveSheet.AutoFilter.Filters(filterColumn).Criteria1
但是,当未激活过滤器时,Criteria1和Criteria2方法会给我一个错误,似乎没有返回任何内容。愚蠢的是,没有办法绕过所有标准,但到目前为止我还没有找到它。
答案 0 :(得分:1)
如果您有1个或2个标准已选择,那么您可以像这样检索它们
Option Explicit
Sub sample()
Dim rRange As Range
Dim iFiltCrit As Long
'Remove any filters
ActiveSheet.AutoFilterMode = False
Set rRange = Range("A1:B8")
With rRange
.AutoFilter Field:=1, Criteria1:="=1"
Debug.Print Sheet1.AutoFilter.Filters(1).Criteria1
End With
'Remove any filters
ActiveSheet.AutoFilterMode = False
End Sub
如果您有超过2个条件,那么您可以循环播放,因为它们存储在数组中。
问题是当过滤器处于非活动状态时,您可以看到所有内容,然后从内存中清除所有条件。看这个例子。我正在使用ActiveSheet.ShowAllData
来显示所有数据。
Option Explicit
Sub sample()
Dim rRange As Range
'Remove any filters
ActiveSheet.AutoFilterMode = False
Set rRange = Range("A1:B8")
With rRange
.AutoFilter Field:=1, Criteria1:="=1"
Debug.Print ">"; Sheet1.AutoFilter.Filters(1).Criteria1
'~~> Show all data
ActiveSheet.ShowAllData
Debug.Print ">>"; Sheet1.AutoFilter.Filters(1).Criteria1
End With
'Remove any filters
ActiveSheet.AutoFilterMode = False
End Sub
快照
因此,我相信一旦您显示所有数据,就无法再检索到该信息。
答案 1 :(得分:0)
见以下逻辑
Set Sht = ActiveSheet
With Sht.AutoFilter
For i = 1 To .Filters.Count
If .Filters(i).On Then
Sheets("Filter").Cells(j, 1).Value = .Range(6, i).Column 'header starts from 6th row
A = .Filters(i).Count
If A = 1 Then
crtnme = .Filters(i).Criteria1
msgbox(crtnme)
ElseIf A = 2 Then
crtnme = .Filters(i).Criteria1
crtnme = crtnme & "|" & .Filters(i).Criteria2
msgbox(crtnme)
Else
For k = 1 To A
crtnme = crtnme & "|" & .Filters(i).Criteria1(k)
Next
msgbox(crtnme)
End If
End If
Next i
End With