Если имя листа содержит указанный c текст? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь отработать отказоустойчивость, чтобы проверить, активен ли правильный лист, перед запуском остальной части макроса. Лист всегда является конечным листом и всегда содержит заданную строку c, но также содержит число и может варьироваться (например, Карта поля 1, Карта поля 2, Карта поля 3 и т. Д. c), поэтому точная строка не всегда одно и то же. Мне просто нужно знать, что активный лист содержит имя «Карта поля» в имени независимо от номера.

Мне нужно что-то вроде:

Sheets(Sheets.Count).Select

If Not Activesheet.Name contains "Field Map" Then
Msgbox ("Sheet not found")
Exit Sub
End If

Я знаю, что бит «Содержит» не существует, но надеюсь, это объясняет, что я пытаюсь сделать?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Как уже упоминалось в комментариях, вы должны воздерживаться от использования .Select и лайков в максимально возможной степени. Этого может быть достаточно, чтобы получить соответствующий лист в переменной. Что-то, что можно рассмотреть, может быть следующим, используя объект ArrayList, который можно отсортировать и перевернуть, чтобы получить максимальное целое число, используемое при создании листов с именем `" Карта поля *** ":

Sub Test()

Dim ws As Worksheet
Dim arrList As Object: Set arrList = CreateObject("System.Collections.ArrayList")

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Field Map*" Then arrList.Add Int(Split(ws.Name, " Map ")(1))
Next

If arrList.Count > 0 Then
    arrList.Sort
    arrList.Reverse
    Set ws = ThisWorkbook.Worksheets("Field Map " & arrList(0))
Else
    MsgBox "No sheet found!"
End If

End Sub

Теперь вы Вы можете использовать ws далее в своем коде, если вы используете sh. Если вы должны использовать .Select, измените эту строку на ThisWorkbook.Worksheets("Field Map " & arrList(0)).Select

Обратите внимание, что я предположил, что ваши листы называются Field Map 1, Field Map 2 et c et c.

0 голосов
/ 24 апреля 2020

Использовать функцию InStr

    If InStr(ActiveSheet.Name, "Field Map") Then
    'Your Code
Else
    MsgBox ("Sheet Not Found"): Exit Sub
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...