excel - VBA:返回超过 2 个过滤条件

标签 excel vba filter autofilter

我在一堆列上有一个标准过滤器,我想阅读过滤条件。在选择超过 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/

相关文章:

php - 如何缩进 Laravel Controller ,查看代码?

vba - 在使用与上一行的 %difference 时,需要帮助使用 vba 填写 excel 数据透视表留下的空白

javascript - 在一个有序的标量数组中,给定一个数字,找到前面较小的和后面较大的。

c# - 未触发异常过滤器

excel - 条件格式和 vba

excel - 使用for循环(Python)追加/连接多个excel数据集

excel - Excel 2016 中的 Workbook_Open() 未触发

vba - Outlook VBA 插入文本行

vba - VBA 中的动态变量

python - 在 Python 中过滤 JSON 文档,保持原始关键路径结构