我在一堆列上有一个标准过滤器,我想阅读过滤条件。在选择超过 2 个标准的情况下,这并不是真正的问题。我有一排不同的字符串,我希望能够获得用户选择的标准。目前我正在使用这段代码:
Set ws = Worksheets(actSheet)
For Each flt In ws.AutoFilter.Filters
If flt.On = True Then
criterias = criterias & flt.Criteria1 & ", "
criterias = criterias & flt.Criteria2 & ", "
End If
Next flt
这只让我有机会获得最多 2 个标准。
我在不同的论坛中找到了这行代码,但它被用于其他原因,我真的不知道如何为我使用这段代码:
ActiveSheet.AutoFilter Field:=1, Criteria1:=Array(param1, param2, param3,...) _
Operator:=xlFilterValues
这样你就可以设置我认为的标准,但我想得到它。
任何想法我可以如何使用此代码?或者我的问题的另一个建议?
提前致谢!
编辑:
好吧,我已经为此工作了很多时间,但仍然没有解决方案。实际上不可能在数组中获取 Criteria1 中的数组。总是相同的错误“无法分配给数组”。尽管我之前将相同的数组分配给了 Filter Criteria1 10 行代码......
所以这有效:
Dim arr(3) As String
arr(2) = "test1"
arr(1) = "test2"
arr(3) = "test3"
ActiveSheet.Range("A1:C1").AutoFilter Field:=1, Criteria1:=arr, Operator:=xlFilterValues
但这不会:
arr = ws.AutoFilter.Filters.Criteria1
最佳答案
编辑2:这将获取过滤器及其标题
Sub GetFilteredItems()
Dim fl As Filter
Dim ws As Worksheet: Set ws = ActiveSheet
Dim i As Long: i = 0
Dim myfilters As String
For Each fl In ws.AutoFilter.Filters
If fl.On Then
If Len(myfilters) = 0 Then
myfilters = ws.AutoFilter.Range.Offset(0, i).Resize(1, 1).Value
Else
myfilters = myfilters & "; " & _
ws.AutoFilter.Range.Offset(0, i).Resize(1, 1).Value
End If
If fl.Count > 2 Then
myfilters = myfilters & ": " & Replace(Join(fl.Criteria1), "=", "")
Else
myfilters = myfilters & ": " & Replace(fl.Criteria1, "=", "")
On Error Resume Next
myfilters = myfilters & " " & Replace(fl.Criteria2, "=", "")
On Error GoTo 0
End If
End If
i = i + 1
Next
Debug.Print myfilters
End Sub
我删除了其他代码以避免混淆读者。
这很像 OP 的方法,但有点直接。 HTH。
关于excel - VBA:返回超过 2 个过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755158/