【问题标题】:VBA Macro autofilter for a range范围的VBA宏自动过滤器
【发布时间】:2019-05-04 09:29:27
【问题描述】:

我正在尝试根据预先确定的变量范围过滤一组数据。这些将由电子表格的用户在“主页”工作表的一组区域中声明。但是,在运行宏时,它不会返回任何结果。我试图以多种方式解决这个问题,但是没有任何东西返回所需的结果。

到目前为止,我一直尝试使用运算符,将值声明为数组,过滤将包含值和通配符的单元格范围。

我当前的代码如下,这些都没有返回我想要的输出

Dim fliterStr As Variant
filterStr = wsHome.Range("R6:R12").Value
wsMissing.Range("G1").AutoFilter field:=7, Criteria1:=filterStr

wsMissing.Range("G1").AutoFilter field:=7, Criteria1:="*X*", Operator:=xlFilterValues, Criteria2:="*Y*"

预期结果将是过滤器搜索与 R6:R12 范围内的变量匹配的任何值,但目前返回为空白。

第二段代码返回一些但不是全部的期望结果。如果我排除了运算符和 Criteria2,那么我会看到一组不同的结果,应该 包含但不包含。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    AutoFIlter 标准的数组适用于 1-D 数组。当您拾取一列的一部分时,您正在创建一个 2-D 数组。需要使用TRANSPOSE()进行转换。

    假设我们在Sheet1:

    Sheet2:

    跑步:

    Sub AutoDemo()
        Dim wsHome As Worksheet, wsMissing As Worksheet
        Dim rng1 As Range, rng2 As Range, wf As WorksheetFunction
        Dim filterStr
    
        Set wsHome = Sheets("Sheet1")
        Set wsMissing = Sheets("Sheet2")
    
        Set wf = Application.WorksheetFunction
    
        Set rng1 = wsHome.Range("A1:G20")
    
        Set rng2 = wsMissing.Range("R6:R12")
        filterStr = wf.Transpose(rng2)
    
        rng1.AutoFilter Field:=7, Criteria1:=filterStr, Operator:=xlFilterValues
    
    End Sub
    

    将产生:

    TRANSPOSE() 构成了 1-D 数组。

    【讨论】:

    • 太完美了,非常感谢@Gary's Student 的帮助,这解决了我在独立于整体宏使用时过滤器不起作用的问题,我现在才知道为什么合并它仍然不返回任何结果.....编辑:它确实返回结果(因为它们被自动过滤器正确选择)但工作表无法显示它们,这可以通过单击选择一个过滤结果然后全部来解决显示在页面上
    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2018-02-28
    • 2023-02-02
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多