VBA: функция, которая находит имя листа с наибольшим номером из всех имен листов - PullRequest
0 голосов
/ 19 сентября 2019

Предположим, что есть рабочая книга с семью листами, а названия листов следующие:

"Условия"

"Револьверы"

"15"

"22"

"55"

"59"

"146"

Мне нужен код VBA, который будет определять лист с наибольшим номеромназвание любого листа во всей книге.В этом примере он должен идентифицировать 146 как наибольшее число.Затем код должен создать новый лист с именем листа, которое на целое число выше, чем имя предыдущего листа.В этом примере новый лист будет создан и затем будет назван «147».Ниже приведен мой код, мне просто нужно заменить «имя вкладки + 1» на соответствующую функцию:

Sub AddSheet()

Dim wb As Workbook: Set wb = ActiveWorkbook
Dim strName As String: strName = "tab name + 1"
Dim ws As Worksheet
Set ws = wb.Worksheets.Add(Type:=xlWorksheet)
With ws
    .Name = strName
End With

End Sub

Редактировать на основе ответа BigBen ниже

Sub AddSheet()


Dim wb As Workbook: Set wb = ActiveWorkbook
Dim strName As String: strName = CStr(MaxSheetNumber(wb) + 1)
Dim ws As Worksheet
Set ws = wb.Worksheets.Add(Type:=xlWorksheet)
With ws
    .Name = strName
End With

End Sub

Function MaxSheetNumber(ByVal wb As Workbook) As Long
    Dim ws As Worksheet
    For Each ws In wb.Worksheets
        Dim i As Long
        If IsNumeric(ws.Name) Then
            If CLng(ws.Name) > i Then
                i = CLng(ws.Name)
            End If
        End If
    Next

    MaxSheetNumber = i
End Function

1 Ответ

1 голос
/ 19 сентября 2019

Возможно, такая функция:

Function MaxSheetNumber(ByVal wb As Workbook) As Long
    Dim ws As Worksheet
    For Each ws In wb.Worksheets
        Dim i As Long
        If IsNumeric(ws.Name) Then
            If CLng(ws.Name) > i Then
                i = CLng(ws.Name)
            End If
        End If
    Next

    MaxSheetNumber = i
End Function

Это можно легко изменить, чтобы вернуть значение по умолчанию, скажем, 1, если в книге нет нумерованных листов (хотя в настоящее время она будет возвращать 0 и это может быть тем, что вы хотите, если вы планируете добавить 1 для новой вкладки).

В вашем коде:

strName = CStr(MaxSheetNumber(wb) + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...