VBA:返回2个以上的过滤条件

我有一堆列的标准filter,我想读filter标准。 在select超过2个标准的情况下,这不是真正的问题。 我有一串不同的string,我希望能够得到用户select的标准。 目前我正在使用这段代码:

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个标准最大值的机会。 我已经在不同的论坛中find了这行代码,但是由于其他原因,我并不知道如何使用这段代码:

 ActiveSheet.AutoFilter Field:=1, Criteria1:=Array(param1, param2, param3,...) _ Operator:=xlFilterValues 

这样你可以设定标准,但我想知道 。 任何想法如何我可以使用此代码? 或者我的问题的另一个build议?

提前致谢!


编辑:

那么我已经在这个工作了很多小时,仍然没有解决scheme。 在Array中的Criteria1中获取数组是不太可能的。 总是相同的错误“不能分配给数组”。 尽pipe我将相同的数组分配给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:这得到的filter,它的头

 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。

最后我find了答案!

这个问题不是太大,只是很难得到答案,因为你几乎没有在互联网上find任何东西。

 Dim criterias As String Dim arr As Variant For Each flt In ws.AutoFilter.Filters If flt.On = True Then 'write the column head in the string criterias = criterias & "=" & _ ws.AutoFilter.Range.Offset(0, i - 1).Resize(1, 1).Value & ": " If flt.Count > 2 Then arr = flt.Criteria1 '<----- my problem For i = LBound(arr) To UBound(arr) '<----- criterias = criterias & arr(i) '<----- Next '<----- Else criterias = criterias & flt.Criteria1 On Error Resume Next criterias = criterias & flt.Criteria2 & ", " End If End If i = i + 1 Next flt 

ws只是我的活动工作表

我没有意识到,我应该使数组Variant,而不是初始化它作为一个简单的string数组。

之后,标准string看起来像“Criteria1:= test1 = test2 = test3”,所以只需用“,”或类似的东西replace“=”,你就完成了!

来自德国办公室的Axel Richter在这个问题上是一个很大的帮助;)(德国读者: http ://www.office-loesung.de/p/viewtopic.php?f = 166&t = 666472&p = 2773974#p2773974)