You are referring always to the ActiveSheet
, whenever you do not specify the worksheet explicitly in your code. Thus, in the Range()
you have to refer to the worksheet like this:
From:
Set rngData = Range("A1").CurrentRegion
count = Application.WorksheetFunction.Match("STATUS", Range("A1:AZ1"), 0)
Change to:
With Worksheets(I)
Set rngData = .Range("A1").CurrentRegion
count = Application.WorksheetFunction.Match("STATUS", .Range("A1:AZ1"), 0)
End With
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:
count = Application.Match("*STATUS*", Worksheets(1).Range("A1:AZ1"), 0)
Then a check is still needed. Like this:
If Not IsError(count) Then
rngData.autofilter Field:=count, Criteria1:="INACTIVE"
End If
Concerning the second part of the question, use *
around the value in the Match function:
Public Sub TestMe()
Range("E1") = "5teSt34"
Debug.Print Application.WorksheetFunction.Match("*Test*", Range("A1:H1"), 0)
End Sub
Will always return 5
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…