Найдите имя листа и получите индекс листа - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь найти лист по имени и получить индекс этого листа. Я попробовал этот способ, но он не работает.

For Each Sheet In ThisWorkbook.Sheets
    If Sheet.Name Like "*Consolidated EOY*" Then
        Sheet_Nr = Sheet.Index
    End If
Next

Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Если я изменю «ThisWorkbook» на имя книги, в которой находятся листы, тогда все заработает.

For Each Sheet In WB_New.Sheets
    If Sheet.Name Like "*Consolidated EOY*" Then
        Sheet_Nr = Sheet.Index
    End If
Next
0 голосов
/ 28 мая 2020

Использование 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...