Как уже упоминалось в комментариях, вы должны воздерживаться от использования .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.