Tengo un código muy simple que agrega una nueva hoja de cálculo, después de las hojas de trabajo actuales, a un documento de Excel y luego cambia su nombre a uno ingresado en un cuadro de texto en una forma de usuario. Funciona bien en un nuevo libro de trabajo, sin embargo, en un libro de trabajo que tiene varias hojas de cálculo existentes, crea la nueva hoja de trabajo, pero no la renombra.Creando y nombrando hojas de cálculo en Excel VBA
Esto sólo ocurre la primera vez que se ejecuta este código, la próxima vez que se ejecuta bien. Lo que lo hace aún más extraño es que si abres el editor de VBA para intentar depurarlo, también funciona bien. Obviamente, esto hace que encontrar el error sea bastante difícil.
El código que estoy usando es aquí:
Dim WS As Worksheet
Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
WS.name = txtSheetName.value
bastante simple. Me pregunto si este problema es que está intentando cambiar el nombre de la hoja antes de que se cree correctamente. ¿Hay una mejor manera de escribir este código?
Actualización: he empezado depuración esto utilizando msgboxes, como abrir el depurador hace la parada problema, y parece que sólo deja de procesar el código de la mitad de:
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 tiene muchas maneras de mantener entretenido.A menudo no puedes hacer nada al respecto. Pruebe varias cosas relativamente inútiles, como usar la colección 'Worksheets' en lugar de' Sheets' o asignar 'txtSheetName.value' primero a una variable de cadena. – GSerg
Parece que está configurando el nombre antes de que esté en txtSheetName. ¿Está ejecutando este código fuera del evento txtSheetName_Change? Si no, eso probablemente arreglaría el problema. –
@Marc el evento se ejecuta desde un evento de botón, que valida si el cuadro de texto se ha establecido –