Ho un codice molto semplice che aggiunge un nuovo foglio di lavoro, dopo i fogli di lavoro correnti, a un documento Excel e quindi ne cambia il nome in uno inserito in una casella di testo su un modulo utente. Funziona bene su una nuova cartella di lavoro, tuttavia in una cartella di lavoro che ha un numero di fogli di lavoro esistenti crea il nuovo foglio di lavoro, ma non la rinomina.Creazione e denominazione di un foglio di lavoro in Excel VBA
Questo accade solo la prima volta che si esegue questo codice, la volta successiva verrà eseguito correttamente. La cosa che rende ancora più strano è che se apri l'editor VBA per provarlo e eseguirne il debug, allora funziona egregiamente. Questo ovviamente rende difficile trovare l'errore.
Il codice che sto utilizzando è qui:
Dim WS As Worksheet
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
WS.name = txtSheetName.value
Abbastanza semplice. Mi chiedo se questo problema è che sta cercando di rinominare il foglio prima che sia creato correttamente? C'è un modo migliore per scrivere questo codice?
Aggiornamento: ho iniziato il debug questo utilizzando MsgBoxes, come l'apertura del debugger rende la fermata problema, e sembra che semplicemente interrompe l'elaborazione del codice a metà:
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 ha molti modi per farti divertire.Spesso non puoi farci nulla. Prova varie cose relativamente inutili, come usare la raccolta 'Worksheets' invece di' Sheets' o assegnare 'txtSheetName.value' a una variabile stringa prima. – GSerg
Sembra che tu stia impostando il nome prima che sia in txtSheetName. Stai eseguendo questo codice dall'evento txtSheetName_Change? In caso contrario, probabilmente risolverebbe il problema. –
@Marc l'evento viene eseguito da un evento button, che convalida se la casella di testo è stata impostata –