【问题标题】:excel VBA - return Criteria1 Array from an Autofilterexcel VBA - 从自动过滤器返回 Criteria1 数组
【发布时间】:2016-12-04 08:06:07
【问题描述】:

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

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

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

有没有一种方法可以让我以类似于此外观的方式返回一个已切换的数组?

msgbox ActiveSheet.Range("$A$1:$P$1000").criteria1

【问题讨论】:

    标签: excel vba filter autofilter


    【解决方案1】:

    从以下数据开始:

    此子应用过滤器:

    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
    

    这个潜艇将:

    • 确定过滤了哪些列
    • 已过滤的列,已进行选择
    • 列出实际选择


    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2023-03-21
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多