#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) только затем создайте лист и назовите его. На этом есть ответы, которые показывают, как выполнить каждый из этих шагов