VBA Добавить новый лист, если имя существует, добавить номер - PullRequest
1 голос
/ 06 апреля 2020

следующий код проверяет, существует ли лист с именем "Final", если да, он создает другой лист, но имя зависит от количества листов в книге. Поэтому, если есть только один лист с именем "Final" и 10 разных листов (всего 11 листов), макрос добавит новый лист с именем "Final_12". Как изменить код так, чтобы он создавал "Final_1", "Final_2" ect. листы?

Set WSF = wb.Worksheets.Add(After:=wb.Worksheets(PayrollWS))
Set NewSht = ActiveSheet
newShtName = "Final"

'if "Final" sheet exists, there will be another added, e.g. "Final_2"
For Each Sht In wb.Sheets
    If Sht.Name = "Final" Then
        newShtName = "Final" & "_" & wb.Sheets.Count  'how to amend this part?
    End If
Next Sht

NewSht.Name = newShtName

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Вам нужно посчитать, сколько раз Final существует в качестве имени листа.

'if "Final" sheet exists, there will be another added, e.g. "Final_2"
Dim cnt as Long
For Each Sht In wb.Sheets
    If Left$(Sht.Name,5) = newShtName Then cnt = cnt + 1
Next Sht

NewSht.Name = newShtName & IIF(cnt>0, "_" & cnt, "")
0 голосов
/ 06 апреля 2020

Этот код выполнит работу, он состоит из одного вспомогательного элемента и одной функции

Sub NewFinalSheet()
Dim wsNew As Worksheet
If Not wsExits("Final") Then
    Set wsNew = thisworkbook.Worksheets.Add
    wsNew.Name = "Final"
    Exit Sub
End If

Dim i As Long, newWsName As String
Do
    i = i + 1
    newWsName = "Final_" & i
    If Not wsExits(newWsName) Then
        Set wsNew = ThisWorkbook.Sheets.Add
        wsNew.Name = newWsName
        Exit Sub
    End If
Loop
End Sub

Функциональная часть, которую вы можете выбрать один из следующих двух: Это проще, но медленнее:

Function wsExits(shName As String) As Boolean
Dim ws As Worksheet

For Each ws In thisworkbook.Worksheets
    If ws.Name = shName Then
        wsExits = True
        Exit Function
    End If
Next ws

wsExits = False
End Function

Это должно быть быстрее, но это фокус ошибки

Function wsExits(shName As String) As Boolean
On Error GoTo NotE
If ThisWorkbook.Worksheets(shName).Name = shName Then
    wsExits = True
    Exit Function
End If

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