【问题标题】:Adding Dynamic changing cell values to an Autofilter Array in VBA在 VBA 中将动态变化的单元格值添加到自动过滤器数组
【发布时间】:2018-10-16 10:27:22
【问题描述】:

在 Excel 工作表的 Sheet1 中,我在 Range("B6") 中有一个代码,因此本月可能是一个代码,但也可以是下一个在下面添加的另外 3 个代码,它可能是两个新代码在下个月,因此值将不断变化,并且数字的范围可以在 1 到任何动态之间。根据下一张 Sheet2 上的这些值,需要过滤日期。所以在 Sheet2 中,我有三列,一列是 Sl_No。一个 ME_Code(这是需要根据 Sheet 1 数据过滤的内容)和价格

所以我是 VBA 的新手,并尝试了以下代码,当我尝试将多个代码添加到 VBA 中的自动过滤器数组时,该代码不起作用。

这是我的代码,当我尝试使用 else 选项时,它不起作用,有人可以帮助我吗,我尝试了 StackOverflow 本身的几个选项,但没有工作

这是我的代码,

Sub ToCheckArray()

Dim N As Long

Worksheets("Sheet1").Select
If IsEmpty(Range("B6").Offset(1, 0).Value) Then
    Worksheets("Sheet1").Select
    arr1 = Array(Range("B6"))
    Worksheets("Sheet2").Select
    Range("A1:C1").AutoFilter field:=2, Criteria1:=arr1, Operator:=xlFilterValues
Else
    Worksheets("Sheet1").Select
    'With Sheets("Sheet1")
        'N = .Cells(Rows.Count, "B").End(xlDown).Row
        'ReDim ary(6 To N)
        'For i = 6 To N
            'ary(i) = .Cells(i, 1)
        'Next i
    'End With

    arr1 = Array(Range("B6", Range("B6").End(xlDown)))
    Worksheets("Sheet2").Select
    Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
End If

End Sub

【问题讨论】:

    标签: arrays excel vba autofilter


    【解决方案1】:

    使用

    Else
        Dim ary As Variant
        With Worksheets("Sheet1")
            ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value)
        End With
        Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
    End If
    

    如您所见,我避免使用 Select 语句代替完全限定的范围引用直到工作表引用

    所以你的整个代码可以重写如下:

    Sub ToCheckArray()
        Dim ary As Variant
    
        With Worksheets("Sheet1")
            If IsEmpty(.Range("B6").Offset(1, 0).Value) Then
                ary = Array(.Range("B6").Value)
            Else
                ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value
            End If
        End With
        Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
    End Sub
    

    如果您确定 Sheet1 在 B6 中始终有一个值,并且可能的其他值跟随它直到 B 列中的最后一个非空单元格,那么它可以折叠为:

    Sub ToCheckArray()
        Dim ary As Variant
    
        With Worksheets("Sheet1")
            ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlUp)).Value
        End With
        Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
    End Sub
    

    【讨论】:

    • 非常感谢.....它奏效了......这就是我学习的方式,感谢您的回答和解决。非常感谢..
    • @Shaumyabrata 如果回答问题,请不要忘记接受。 stackoverflow.com/help/someone-answers
    • 我点击了勾号,猜猜这就是你的意思......对不起,我是新手......
    猜你喜欢
    • 2020-11-30
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2015-06-21
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多