在VBA中基于数组进行过滤

时间:2019-07-18 12:19:43

标签: arrays excel vba

以下代码在10分钟前生效,现在出现错误1004:Range类的Autofilter方法失败。知道为什么吗?我想基于字母J过滤C列-因此仅过滤以J开头的值。之后,我想删除隐藏的行,但这似乎不起作用。请帮助

Option Explicit

Dim ws As Worksheet
Dim filterarray As Variant
Dim findarray As Variant
Dim MyLastRow1 As Long, i As Long, j As Long, k As Long

Sub test23()
    Set ws = ThisWorkbook.Worksheets("T&E Report")
    MyLastRow1 = Range("C100000").End(xlUp).Row
    findarray = Array("J")
    ReDim filterarray(0 To 0)

    j = 0

    For k = 0 To UBound(findarray)
        For i = 2 To MyLastRow1
            If InStr(ws.Cells(i, 3).Value, findarray(k)) > 0 Then
                filterarray(j) = ws.Cells(i, 3).Value
                j = j + 1
                ReDim Preserve filterarray(0 To j)
            End If 
        Next i
    Next k

    ws.Range("$C$1:$C$" & MyLastRow1).AutoFilter Field:=3, Criteria1:=Array(filterarray), Operator:=xlFilterValues
End sub

1 个答案:

答案 0 :(得分:1)

您将要过滤的数据范围设置为仅一列(“ C”),但要求自动过滤器根据该范围的第3列设置过滤器(因此应为“ E”列)

由于如果要过滤的范围不包含“ E”列,则会出现1004运行时错误。但是,如果您已经激活了包含“ E”列的自动过滤器(这意味着您在E列上可见此三角形按钮),则不会发出运行时错误-也许这就是代码在10分钟前起作用的原因。