I need to apply the same filter to all the worksheets in the same workbook.
All the sheets have headers in the first row, but the header name that the filter is supposed to be applied to is not always in the same column, i.e, worksheet one the header in question is in column H, in worksheet 2 it's in column A, in worksheet 3 it's in column L and so on...
Also, some of the headers will not be an exact match for the criteria - i.e, some will have "STATUS" as the header, some will be "prefix_Status", others "CurrentStatus" and so on.. So I need to use the Instr
funciton (Unless there's some better option) but I cannot seem to figure out where or how to use it..
Here is the code I have so far:
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
Set rngData = Range("A1").CurrentRegion
count = Application.WorksheetFunction.Match("STATUS", Range("A1:AZ1"), 0)
rngData.autofilter Field:=count, Criteria1:="INACTIVE"
Next I
End Sub
This code applies the filter to only ONE sheet.
Basically what you need to do is reference the sheet in your code as you loop through, which you are not doing - you are only referring to the active sheet by not including any references.
With Match you can use wildcards.
You are referring always to the
ActiveSheet
, whenever you do not specify the worksheet explicitly in your code. Thus, in theRange()
you have to refer to the worksheet like this:From:
Change to:
The dots in the code between
With Worksheets(I) - End With
are what makes the difference:Concerning the
Application.WorksheetFunction.Match
, it only matches cells which contain exactly the word "STATUS". If there is something else like a space before or a sign after, then something like this is a good idea:Then a check is still needed. Like this:
Concerning the second part of the question, use
*
around the value in the Match function:Will always return
5
.