VBA Вставить рабочий лист, но не в том случае, если имя листа уже существует

#excel #vba #worksheet

Вопрос:

Этот макрос вставляет рабочий лист и дает ему имя. Если имя неверно, оно переходит в ту NonValidName: часть кода.

Проблема, с которой я сталкиваюсь, заключается в том, что, если имя неверно, т. е. уже существует или слишком длинное, сообщение об ошибке отображается по назначению, однако лист по-прежнему создается с обычным именем, т. е. Лист номер.

Как я могу предотвратить создание листа при недопустимой записи?

 Sub InsertWorksheet()
    Dim strName As String
    Dim lTryAgain As Long
    strName = InputBox("Sheet Name")
    strNameUCase = UCase(strName)
        If strNameUCase = vbNullString Then Exit Sub
        ActiveWorkbook.Unprotect Password:="abc"
        Sheets.Add After:=Sheets(Sheets.Count)
        On Error GoTo NonValidName 
        ActiveSheet.Name = strNameUCase
        Application.DisplayAlerts = False
            
        If ActiveSheet.Name <> strNameUCase Then ActiveSheet.Delete
        Application.DisplayAlerts = True
        ActiveWorkbook.Protect Password:="abc"
Exit Sub

NonValidName:
    lTryAgain = MsgBox(strNameUCase amp; " Is not a valid name. Try Again", vbOKCancel)
        If lTryAgain = vbCancel Then
            ActiveWorkbook.Protect Password:="abc"
        Else
            Run "InsertWorksheet" 'loops until valid name
        End If
End Sub
 

Комментарии:

1. Примените пошаговый подход: 1) проверьте, является ли предлагаемое имя допустимым — длина в порядке и используются только допустимые символы. 2) проверьте, существует ли уже лист с предлагаемым именем 3) только затем создайте лист и назовите его. На этом есть ответы, которые показывают, как выполнить каждый из этих шагов