У меня есть очень простой код, который добавляет новый рабочий лист после текущих рабочих листов в документ Excel и затем изменяет его имя на одно, введенное в текстовое поле пользовательской формы. Хорошо работает в новой книге, однако в книге, содержащей несколько существующих рабочих листов, он создает новый рабочий лист, но не переименовывает его.Создание и присвоение имен в Excel VBA
Это происходит только при первом запуске этого кода, в следующий раз, когда он будет работать нормально. Вещь, которая делает ее еще более странной, заключается в том, что если вы откроете редактор 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
В Excel есть много способов, чтобы вы были в восторге.Часто вы ничего не можете с этим поделать. Попробуйте различные относительно бесполезные вещи, например, используя коллекцию Worksheets вместо 'Sheets' или присваивая' txtSheetName.value' строковой переменной. – GSerg
Похоже, вы настраиваете имя до того, как оно находится в txtSheetName. Вы запускаете этот код из события txtSheetName_Change? Если нет, это, вероятно, устранит проблему. –
@Marc событие запускается из события кнопки, которое проверяет, установлено ли текстовое поле. –