Использование Like
явно слишком неточно. Вот функция, которой это не нужно.
Function SheetIndex(NamePartial As String) As Integer
Dim Sheet As Worksheet
For Each Sheet In ThisWorkbook.Worksheets
With Sheet
If InStr(.Name, NamePartial) Then
SheetIndex = .Index
End If
End With
Next
End Function
Вызов функции с синтаксисом, как показано ниже. Если вы знаете, что имя, которое вы хотите, начинается с частичного имени, которое у вас есть, я рекомендую изменить приведенный выше код, используя эту строку вместо существующей, If InStr(.Name, NamePartial) = 1 Then
Private Sub TestIndex()
Debug.Print SheetIndex("Consolidated EOY")
End Sub
Я указываю, что Sheets
Коллекция не идентична коллекции Worksheets
, и что тип данных, который вы ищете, - это Worksheet
. В принципе, если вы не знаете разницы между листом и рабочим листом, я бы порекомендовал вам придерживаться того типа, который вам известен. С точки зрения logi c, зачем вам тратить время на поиск большей коллекции Sheets
, когда все, что вы хотите, содержится в коллекции ThisWorkbook.Worksheets
.