excel VBA - 从Autofilter返回Criteria1数组

kam*_*id2 2 excel vba filter autofilter

我有一个表,我需要返回所有切换的值.当我在选择了我想要的内容后录制宏时,它看起来像这样

ActiveSheet.Range("$A$1:$P$1000").AutoFilter Field:=6, Criteria1:=Array("A" _
    , "B", "C", "D", "E", "G"), Operator:=xlFilterValues
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,用户将过滤的a,b,c等值将始终在变化,因此我无法通过这种方式对任何标准进行硬编码.

有没有一种方法可以返回一个切换的数组,其方式类似于它的外观?

msgbox ActiveSheet.Range("$A$1:$P$1000").criteria1
Run Code Online (Sandbox Code Playgroud)

Gar*_*ent 6

从以下数据开始:

在此输入图像描述

这个子应用了一个过滤器:

Sub Macro1()
    Range("A1:C22").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$22").AutoFilter Field:=3, Criteria1:=Array( _
        "Alice", "Boris", "Mike"), Operator:=xlFilterValues
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这个子将:

  • 确定过滤哪些列
  • 已筛选的列的选择
  • 列出实际选择


Sub FilterInformation()
    Dim st As String, ws As Worksheet, rg As Range, boo As Boolean

    Set ws = ActiveSheet
    On Error GoTo GetMeOut
    Set rg = ws.AutoFilter.Range

    MsgBox "Filter range" & vbCrLf & rg.Address

    N = ws.AutoFilter.Filters.Count
    MsgBox "Number of filters" & vbCrLf & N

    For i = 1 To N
        boo = ws.AutoFilter.Filters.Item(i).On
        MsgBox i & "==>" & boo
        If boo Then
            MsgBox UBound(ws.AutoFilter.Filters.Item(i).Criteria1) & " items in array"
            U = UBound(ws.AutoFilter.Filters.Item(i).Criteria1)
            L = LBound(ws.AutoFilter.Filters.Item(i).Criteria1)
            For j = L To U
                MsgBox ws.AutoFilter.Filters.Item(i).Criteria1(j)
            Next
        End If

    Next
    Exit Sub
GetMeOut:
    MsgBox ("no filters in sheet")
End Sub
Run Code Online (Sandbox Code Playgroud)