Cambiar los nombres de las hojas por un valor de celda

Tengo varias hojas y en cada hoja tengo la celda(A1) con un valor.

Me gustaría que con una macro todas las hojas se modificaran con el valor de la celda(A1) de cada hoja, es decir que cada hoja tenga como nombre el valor de A1 de su hoja.

PD. La celda A1 es el resultado de "llamar" otra celda de otra hoja (='Nueva plantilla'!$C$11).

1 Respuesta

Respuesta
1

Visita:
Cursos de Excel y Macros

--------------------------------------------

Prueba la siguiente macro:

Sub Renombrar_Hojas()
'Por Dante Amor
  'Declarar Variables
  Dim sh As Worksheet
  Dim nombre As String
  '
  'Proceso
  For Each sh In Sheets
    'verifica que la celda tenga un valor
    nombre = sh.Range("A1").Value
    If nombre <> "" Then
      'valida que el nombre de la hoja no exista
      If Evaluate("ISREF('" & nombre & "'!A1)") = False Then
        sh.Name = nombre
      End If
    End If
  Next
End Sub

--------------------------------------------

Recomendación de curso en mi canal:

Curso de macros. Consejos para empezar a programar. - YouTube

--------------------------------------------

Sal u dos Dante Amor

Buenas Dante y gracias por responder!

Me salta el siguiente error: "If Evaluate("ISREF('" & nombre & "'!A1)") = False Then"

Creo que es porque la macro intenta cambiar el nombre a toddas las hojas del libro, lo que pasa es que también intenta cambiar a las hojas ocultas, que estas no tienen valor en A1

Muchas gracias!

Ramon.

Discúlpeme, al mismo tiempo necesitaría excluir la hoja (Nueva plantilla) de la macro, ya que me afecta para otras macros que esta cambiara de nombre!

Mil Gracias!!!!

Ramon.

Recomendación:

Excel vba dictionary parte 1 - YouTube

--------------------------------------------

Me salta el siguiente error: "If Evaluate("ISREF('" & nombre & "'!A1)") = False Then"

¿Qué dice el mensaje de error?

La macro funciona incluso si la hoja está oculta.

Te anexo la macro actualizada para excluir la hoja "Nueva plantilla".

En esta línea de la macro te puse otros ejemplos, por si necesitas excluir más hojas.

Sub Renombrar_Hojas()
'Por Dante Amor
  'Declarar Variables
  Dim sh As Worksheet
  Dim nombre As String
  '
  'Proceso
  For Each sh In Sheets
    'verifica que la celda tenga un valor
    nombre = sh.Range("A1").Value
    Select Case LCase(nombre)
      Case LCase("Nueva plantilla"), LCase("OTRA HOJA"), LCase("etc")
      Case Is <> ""
        'valida que el nombre de la hoja no exista
        If Evaluate("ISREF('" & nombre & "'!A1)") = False Then
          sh.Name = nombre
        End If
    End Select
  Next
End Sub

--------------------------------------------

Excel vba dictionary parte 3 - YouTube

--------------------------------------------

Sal u dos Dante Amor

el error dice: "se ha producido el error '13' en tiempo de ejecución

No coinciden los tipos

Ya esta!

Tenia una hoja con un (*) y otra con más de 31 caracteres, de allí el error.

Funciona fantásticamente!

Muchas gracias

Ramon.

Se podría hacer solo para las hojas visibles, exceptuando Nueva plantilla?

Lo siguiente excluye "nueva plantilla"

Sub Renombrar_Hojas()
'Por Dante Amor
  'Declarar Variables
  Dim sh As Worksheet
  Dim nombre As String
  '
  'Proceso
  For Each sh In Sheets
    'verifica que la celda tenga un valor
    nombre = sh.Range("A1").Value
    If sh.Visible = xlSheetVisible Then
      Select Case LCase(nombre)
        Case LCase("Nueva plantilla"), LCase("OTRA HOJA"), LCase("etc")
        Case Is <> ""
          'valida que el nombre de la hoja no exista
          If Evaluate("ISREF('" & nombre & "'!A1)") = False Then
            sh.Name = nombre
          End If
      End Select
    End If
  Next
End Sub

Recomendaciones:

Curso de macros. Generar archivos en automatico. - YouTube

Curso de macro. Generar archivo y enviar correo en automatico. - YouTube

--------------------------------------------

Sal u dos Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas