Necesito una macro que me cambie el nombre de la hoja utilizada ?

Necesito una macro que me cambie el nombre de la hoja utilizada, por ejemplo: Tengo un archivo de excel que tiene muchas hojas abiertas cada una tiene un nombre y apellido diferente y quiero que cuando este trabajando esa hoja 1 me tome el C5 como el nombre de esa hoja de esa hoja, si agarro la hoja 2 me tome el C5 de esa hoja y asi sucesivamente.

1 Respuesta

Respuesta
1

Abre el Editor Visual Basic de Excel presionando las teclas ALT + F11

Das doble clic en el objeto ThisWorkbook del tu libro actual.

Insertas el siguiente código dentro de Thisworkbook

Private Sub Workbook_SheetActivate(ByVal Sh As Object)Hoja1.Name = "" & Range("C5").FormulaR1C1End SubPrivate Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)Hoja1.Name = "" & Range("C5").FormulaR1C1End Sub

El primer codigo lo que hace es cambiar el nombre del objeto Hoja1 por el valor de la celda C5 de la hoja activa en pantalla ,cada vez que activas/abres una hoja de tu libro de excel.

El segundo codigo, hace lo mismo, pero cada vez que realizas un cambio dentro de la hoja activa de tu libro de excel.

Acá unas imagenes, para ser mas claro:

Califica mi respuesta, si te fue util. :)

Pero si necesitabas que por ejemplo el nombre de la persona que aparece en la celda C5 de la hoja1, aparezca en el nombre de cada hoja que actives del libro y desaparesca al cambiar de hoja dentro del libro...

El codigo/macro para realizarlo es el siguiente:

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

Dim Hojacode As String, hojanombre As String
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'On Error GoTo problema
If Hoja1.Range("C5").FormulaR1C1 = "" Or Hojacode = "" Then Exit Sub
Dim hojacodename
hojacodename = Workbooks(ThisWorkbook.Name).Worksheets(Workbooks(ThisWorkbook.Name) _
            .ActiveSheet.Name).CodeName
If hojacodename = Hojacode Then ActiveSheet.Name = hojanombre
problema: 'detiene codigo en caso de error
Exit Sub
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo problema
If Not Sh.CodeName = Hojacode Then
Hojacode = Workbooks(ThisWorkbook.Name).Worksheets(Workbooks(ThisWorkbook.Name) _
            .ActiveSheet.Name).CodeName
hojanombre = Workbooks(ThisWorkbook.Name).ActiveSheet.Name
End If
ActiveSheet.Name = "" & Hoja1.Range("C5").FormulaR1C1
problema:
Exit Sub
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
On Error GoTo problema
If Hoja1.Range("C5").FormulaR1C1 = "" Or Hojacode = "" Then Exit Sub
If Sh.CodeName = Hojacode Then Sh.Name = hojanombre
problema: 'detiene codigo en caso de error
Exit Sub
End Sub
Sub restaurarhoja()
    On Error GoTo problema
    If Hojacode = "" Then Exit Sub 'detiene codigo si no existe hojacode
    Dim Hoja As Worksheet 'se crea objeto worksheet
        For Each Hoja In Worksheets 'se envia cada worksheet a objeto Hoja
            If Hoja.CodeName <> Hojacode Then
            Hoja.Name = "" & hojanombre
            End If
        Next Hoja 'siguiente hoja dentro del libro
    Exit Sub
problema: 'detiene en caso de error
Exit Sub
End Sub

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

Si mi respuesta te fue util, recuerda calificarla. :)

Ok gracias, pero solo me modifica la hoja 1 y tengo muchas personas q cada una es una hoja diferente, por ejemplo en la hoja 2 en c5 voy a colocar otro nombre diferente y así sucesivamente con cada hoja

Comprendo, el codigo que te sirve es el segundo codigo, unicamente cambia:

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

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo problema
If Not Sh.CodeName = Hojacode Then
Hojacode = Workbooks(ThisWorkbook.Name).Worksheets(Workbooks(ThisWorkbook.Name) _
.ActiveSheet.Name).CodeName
hojanombre = Workbooks(ThisWorkbook.Name).ActiveSheet.Name
End If
ActiveSheet.Name = "" & Hoja1.Range("C5").FormulaR1C1
problema:
Exit Sub
End Sub

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

Por este codigo ,para que se refiera a la hoja actual

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

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo problema
If Not Sh.CodeName = Hojacode Then
Hojacode = Workbooks(ThisWorkbook.Name).Worksheets(Workbooks(ThisWorkbook.Name) _
.ActiveSheet.Name).CodeName
hojanombre = Workbooks(ThisWorkbook.Name).ActiveSheet.Name
End If
ActiveSheet.Name = "" & ActiveSheet.Range("C5").FormulaR1C1
problema:
Exit Sub

End Sub

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

De esta manera, cuando cierres el archivo de excel, los nombres asignados se restauran a los originales del libro.

Califica mi respuesta si te fue util! :)

Si necesitas un codigo mas sencillo, que no guarde ni restaure los nombres de las hojas antes de salir de excel, seria este:

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

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error GoTo problema
ActiveSheet.Name = "" & ActiveSheet.Range("C5").FormulaR1C1
problema:
Exit Sub
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo problema
ActiveSheet.Name = "" & ActiveSheet.Range("C5").FormulaR1C1
problema:
Exit Sub
End Sub

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

Espero haberte ayudado, recuerda calificar mis respuestas, ya que esto es una motivacion para continuar ayudando y compartiendo. :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas