variable seleccionar referencia rango para nombre macro libro hoja hacer espaƱol desde celda cambiar asignar activa vba excel-vba excel

referencia - seleccionar hoja excel vba



Crear y asignar nombre a la hoja de trabajo en Excel VBA (3)

Tengo un código muy simple que agrega una nueva Hoja de trabajo, 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.

Esto solo ocurre la primera vez que ejecuta este código, la próxima vez se ejecutará correctamente. 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 está 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: Empecé a depurar esto usando msgboxes, ya que al abrir el depurador se detiene el problema y parece que simplemente deja de procesar el código a la mitad:

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


¿Está comprometiendo la celda antes de presionar el botón (presionando Enter)? El contenido de la celda debe almacenarse antes de poder usarse para nombrar una hoja.

Una mejor forma de hacerlo es abrir un cuadro de diálogo y obtener el nombre que desea usar.


¿Estás usando un controlador de errores? Si ignora los errores y trata de nombrar una hoja como una hoja existente o un nombre con caracteres no válidos, podría pasar por alto esa línea. Vea la función CleanSheetName aquí

http://www.dailydoseofexcel.com/archives/2005/01/04/naming-a-sheet-based-on-a-cell/

para obtener una lista de caracteres no válidos que es posible que desee verificar.

Actualizar

Otras cosas para probar: referencias totalmente calificadas, lanzando un Doevents, limpieza de código. Este código califica su referencia de Sheets a ThisWorkbook (puede cambiarlo a ActiveWorkbook si le conviene). También agrega mil DoEvents (sobreestimación estúpida, pero si algo tarda un poco en completarse, esto lo permitirá; es posible que solo necesite un DoEvents si esto realmente soluciona algo).

Dim WS As Worksheet Dim i As Long With ThisWorkbook Set WS = .Worksheets.Add(After:=.Sheets(.Sheets.Count)) End With For i = 1 To 1000 DoEvents Next i WS.Name = txtSheetName.Value

Finalmente, cada vez que tengo un problema de VBA ridículo que simplemente no tiene sentido, uso CodeCleaner de Rob Bovey. Es un complemento que exporta todos sus módulos a archivos de texto y luego los vuelve a importar. Puedes hacerlo manualmente también. Este proceso limpia cualquier código p corrupto que esté dando vueltas.


http://www.mrexcel.com/td0097.html

Dim WS as Worksheet Set WS = Sheets.Add

No tiene que saber dónde está ubicado, ni cómo se llama, simplemente se refiere a él como WS.
Si aún quieres hacer esto de la manera "pasada de moda", prueba esto:

Sheets.Add.Name = "Test"