У меня есть очень простой код, который добавляет новый рабочий лист, после текущих листов, в документ Excel, а затем меняет свое имя на одно, введенное в текстовое поле пользовательской формы. Хорошо работает в новой книге, однако в книге, содержащей несколько существующих рабочих листов, он создает новый рабочий лист, но не переименовывает его.
Это происходит только при первом запуске этого кода, в следующий раз, когда он будет работать нормально. Вещь, которая делает ее еще более странной, заключается в том, что если вы откроете редактор VBA, чтобы попробовать и отладить его, он также отлично работает. Это явно затрудняет поиск ошибки.
Код, который я использую, находится здесь:
Dim WS As Worksheet
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
WS.name = txtSheetName.value
Довольно просто. Мне интересно, если эта проблема заключается в том, что она пытается переименовать лист, прежде чем он будет правильно создан? Есть ли лучший способ написать этот код?
Update: Я начал отлаживать это с помощью msgboxes, поскольку открытие отладчика останавливает проблему, и кажется, что она просто перестает обрабатывать код наполовину через:
Dim WS As Worksheet
MsgBox (WS Is Nothing)
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
'***** Nothing after this point gets processed *******
MsgBox (WS Is Nothing)
MsgBox WS.name
WS.name = txtSheetName.value
MsgBox WS.name