VBA - 应用具有部分 Header 匹配的过滤器

VBA - Apply Filter With Partial Header Match

我针对基于 header 匹配跨多个工作表应用过滤器的宏解决方案发布了一个问题。

Link:

我需要部分 header 匹配的帮助,而不仅仅是完全匹配,因为某些 header 不会完全匹配标准 - 即,有些会"STATUS" 作为 header,有些会是“prefix_Status”,其他的 "CurrentStatus" 等等。所以我需要使用 Instr 函数(除非有更好的选择)找到任何包含单词 STATUS 的 header 但我似乎无法弄清楚在哪里或如何使用它..

我的当前解决方案在 Match 行抛出以下错误:

Type Mismatch

Sub WorksheetLoop()

         Dim WS_Count As Integer
         Dim I As Integer

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.count

         ' Begin the loop.
         For I = 1 To WS_Count

            Dim count As Integer, rngData As Range

            With Worksheets(I)
                Set rngData = .Range("A1").CurrentRegion

                count = Application.Match("*STATUS*", Worksheets(I).Range("A1:AZ1"), 0)

                If Not IsError(count) Then
                    rngData.autofilter Field:=count, Criteria1:="INACTIVE"
                End If

            End With

         Next I

End Sub

Application.Match returns 找不到匹配项时出错。您使用 IsError 检查错误,但代码在此之前停止。您需要跳过这些错误,以便稍后在代码中捕获它们。

尝试添加:On Error Resume Next

完整代码:

Sub WorksheetLoop()
    Dim WS_Count As Integer, i As Integer, count As Integer
    Dim rngData As Range

    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.count

    'If Application.Match finds no match it will throw an error so we need to skip them
    On Error Resume Next

    ' Begin the loop.
    For i = 1 To WS_Count
       With Worksheets(i)
           count = Application.Match("*STATUS*", Worksheets(i).Range("A1:AZ1"), 0)

           If Not IsError(count) Then
               Set rngData = .Range("A1").CurrentRegion
               rngData.AutoFilter Field:=count, Criteria1:="INACTIVE"
           End If
       End With
    Next i
End Sub

在简单数据集

上测试

之前:

之后: