Macro para poner nombres a hojas según nombres de unas celdas

Para: Dante

Nuevamente recurriendo a tu valiosa ayuda, tengo una macro que me indicaste anteriormente y esta realiza la función de poner los nombres a las hojas, el detalle es que al ejecutar esta macro no me las pone inmediatamente si no tengo que ejecutarla doble vez para que realice los cambios en las hojas; en este caso que podría hacer para que de forma inmediata me realice los cambios.

La macro que me diste fue la siguiente:

Private Sub CommandButton1_Click()
'Act.Por. Dante
    If TextBox1 = "" Then
    UserForm1.Hide
        MsgBox " NO INGRESASTES FECHA ", vbExclamation, "YACHAY MAQUI"
        TextBox1.SetFocus
        UserForm1.Show
    Else
        Hoja45.Range("G5").FormulaLocal = TextBox1
        ActiveWorkbook.RefreshAll
'Pone el nombre a cada Hoja
Application.ScreenUpdating = False
On Error Resume Next
Hoja1.Name = Format(Hoja45.Range("G5"), "dd.mm.yyyy")
Hoja45. Range("K5"). Copy
Hoja1. Range("C4"). PasteSpecial xlPasteAll
Hoja17.Name = Format(Hoja45. Range("J17"), "dd.mm.yyyy") 'SEGUNDA SEMANA
Hoja25.Name = Format(Hoja45. Range("J24"), "dd.mm.yyyy") 'TERCERA SEMANA
Hoja34.Name = Format(Hoja45. Range("J31"), "dd.mm.yyyy") 'CUARTA SEMANA
Hoja38.Name = Format(Hoja45. Range("J39"), "dd.mm.yyyy") 'QUINTA SEMANA
Hoja2.Name = Format(Hoja45.Range("G6"), "dd.mm.yyyy")
Hoja3.Name = Format(Hoja45.Range("G7"), "dd.mm.yyyy")
Hoja4.Name = Format(Hoja45.Range("G8"), "dd.mm.yyyy")
Hoja5.Name = Format(Hoja45.Range("G9"), "dd.mm.yyyy")
Hoja6.Name = Format(Hoja45.Range("G10"), "dd.mm.yyyy")
Hoja7.Name = Format(Hoja45.Range("G11"), "dd.mm.yyyy")
Hoja10.Name = Format(Hoja45.Range("G12"), "dd.mm.yyyy")
Hoja11.Name = Format(Hoja45.Range("G13"), "dd.mm.yyyy")
Hoja12.Name = Format(Hoja45.Range("G14"), "dd.mm.yyyy")
Hoja13.Name = Format(Hoja45.Range("G15"), "dd.mm.yyyy")
Hoja14.Name = Format(Hoja45.Range("G16"), "dd.mm.yyyy")
Hoja15.Name = Format(Hoja45.Range("G17"), "dd.mm.yyyy")
Hoja16.Name = Format(Hoja45.Range("G18"), "dd.mm.yyyy")
Hoja18.Name = Format(Hoja45.Range("G19"), "dd.mm.yyyy")
Hoja19.Name = Format(Hoja45.Range("G20"), "dd.mm.yyyy")
Hoja20.Name = Format(Hoja45.Range("G21"), "dd.mm.yyyy")
Hoja21.Name = Format(Hoja45.Range("G22"), "dd.mm.yyyy")
Hoja22.Name = Format(Hoja45.Range("G23"), "dd.mm.yyyy")
Hoja23.Name = Format(Hoja45.Range("G24"), "dd.mm.yyyy")
Hoja24.Name = Format(Hoja45.Range("G25"), "dd.mm.yyyy")
Hoja27.Name = Format(Hoja45.Range("G26"), "dd.mm.yyyy")
Hoja28.Name = Format(Hoja45.Range("G27"), "dd.mm.yyyy")
Hoja29.Name = Format(Hoja45.Range("G28"), "dd.mm.yyyy")
Hoja30.Name = Format(Hoja45.Range("G29"), "dd.mm.yyyy")
Hoja31.Name = Format(Hoja45.Range("G30"), "dd.mm.yyyy")
Hoja32.Name = Format(Hoja45.Range("G31"), "dd.mm.yyyy")
Hoja33.Name = Format(Hoja45.Range("G32"), "dd.mm.yyyy")
Hoja35.Name = Format(Hoja45.Range("G33"), "dd.mm.yyyy")
Hoja36.Name = Format(Hoja45.Range("G34"), "dd.mm.yyyy")
Hoja37.Name = Format(Hoja45.Range("G35"), "dd.mm.yyyy")
Hoja46.Name = Format(Hoja45.Range("K3"), "dd.mm.yyyy")
Hoja47.Name = Format(Hoja45.Range("G36"), "dd.mm.yyyy")
Hoja48.Name = Format(Hoja45.Range("G37"), "dd.mm.yyyy")
Hoja49.Name = Format(Hoja45.Range("G38"), "dd.mm.yyyy")
Hoja39.Name = Format(Hoja45.Range("G39"), "dd.mm.yyyy")
Hoja42.Name = Format(Hoja45.Range("G40"), "dd.mm.yyyy")
Hoja43.Name = Format(Hoja45.Range("G41"), "dd.mm.yyyy")
Hoja8.Name = Format(Hoja45. Range("J10"), "dd.mm.yyyy") 'PRIMERA SEMANA
Call copiar_celdas
UserForm1.Hide
MsgBox "Verificar si se realizaron los cambios", vbInformation
TextBox1 = ""
TextBox1.SetFocus
End If
End Sub

1 Respuesta

Respuesta
1

¿Sabes debuggear la macro?

Primer quita esta instrucción:

On Error Resume Next

En lugar de ejecutar con F5, presiona F8, o pon el cursor en esta línea

If TextBox1 = "" Then

Y presiona F9 para poner un punto de interrupción, notarás que se pone de color rojo

Después de que pusiste ese punto rojo, ejecuta la macro normal, cuando se detenga en ese punto, empieza a presionar F8 para que avance línea por línea y me dices por qué no te pone los nombres de las hojas la primera vez que la ejecutas.

Hola! Dante

Realice lo que indicas y la hora de ejecutarla esta automáticamente me manda a error marcando de línea amarilla la opción de la primera hoja a la que tiene que poner el nombre.

En este caso como se podría mejorar esta opción.

Primero, la macro que pusiste, se ve diferente a la macro que tienes en la imagen.

El error es porque ya existe una hoja con ese nombre.

Empieza a nombrar las hojas de atrás hacia adelante

Hoja43.Name = Format(Hoja45.Range("G41"), "dd.mm.yyyy")
Hoja42.Name = Format(Hoja45.Range("G40"), "dd.mm.yyyy")
'
'
'
Hoja1.Name = Format(Hoja45.Range("G5"), "dd.mm.yyyy")

Gracias! Dante 

Esta resultando de maravilla estos cambios pero aun me sigue mandando error.

Bueno en la macro inicial borre unas cosas que no tenían valor alguno como también ordene un poco el código porque se veía un poco desordenado, pero bueno gracias por tu observación.

En este caso a que se debería el error ya que realice todo lo que me indicaste.

Lo que pasa es que la hoja que quieres renombrar ya existe.

No puedes tener 2 hojas con el mismo nombre, significa que quieres poner 2 hojas con la misma fecha, si las hojas ya tienen la fecha que necesitas ya no es necesario nombrarlas.

O primero renombra todas las hojas así:

hoja1.name = "ren1"

hoja2.name = "ren2"

Etc.

Ya que renombraste las hojas, ahora sí pon el código para renombrar las con la fecha

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas