J'ai un code très simple qui ajoute une nouvelle feuille de calcul, après les feuilles de calcul en cours, à un document Excel, puis change son nom en un entré dans une zone de texte sur un userform. Fonctionne correctement sur un nouveau classeur, mais dans un classeur qui a un certain nombre de feuilles de calcul existantes, il crée la nouvelle feuille de calcul, mais ne le renommer pas.Création et nommage de feuille de calcul dans Excel VBA
Cela ne se produit que la première fois que vous exécutez ce code, la prochaine fois qu'il fonctionnera correctement. La chose qui le rend encore plus étrange est que si vous ouvrez l'éditeur VBA pour essayer de le déboguer, il fonctionne bien aussi. Cela rend évidemment la recherche de l'erreur assez difficile.
Le code J'utilise est ici:
Dim WS As Worksheet
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
WS.name = txtSheetName.value
assez simple. Je me demande si ce problème est qu'il essaie de renommer la feuille avant qu'elle ne soit correctement créée? Y a-t-il une meilleure façon d'écrire ce code?
Mise à jour: J'ai commencé le débogage cela en utilisant msgboxes, comme l'ouverture du débogueur fait l'arrêt de problème, et il semble que juste arrête de traiter le code à mi-chemin:
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 a plusieurs façons de vous amuser.Souvent, vous ne pouvez rien faire à ce sujet. Essayez diverses choses relativement inutiles, telles que l'utilisation de la collection 'Worksheets' au lieu de' Sheets' ou l'affectation de 'txtSheetName.value' à une variable de chaîne en premier. – GSerg
Il semble que vous définissiez le nom avant qu'il ne soit dans txtSheetName. Exécutez-vous ce code hors de l'événement txtSheetName_Change? Sinon, cela réglerait probablement le problème. –
@Marc l'événement est exécuté à partir d'un événement de bouton, qui valide si la zone de texte a été définie –