Utilizar el nombre interno de la hoja en una fórmula con macro

Tengo un archivo excel en el cual realizo unos cálculos y/o actualizaciones utilizando macros, necesito poder utilizar en las fórmulas que están contenidas dentro del código de la macro, el nombre interno de las hojas, esto para evitar que si le cmabian el nombre a la hoja, la macro me de error por no encontrar la hoja a la que hace referencia la respectiva fórmula.

Este es un ejemplo de las fórmulas que incluyo en la macro, en este caso se hace referencia a la hoja4, mientras no se le cambie el nombre a esa hoja, la macro corre perfectamente, pero en el momento en que la hoja4 cambia de nombre, me genera error

ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(value(RC[-1]),[MACROS_LABORALES.xlsm]Hoja4!R13C1:R210C11,2,0)"

Agradezco de antemano a quien me pueda colaborar con el tema.

2 respuestas

Respuesta
2
El nombre interno de las hojas,

Suponiendo que el nombre interno (CodeName) de la hoja es "NombreFijo".

Entonces con el siguiente código obtenemos el nombre de la hoja según el CodeName:

Sub test()
  Dim l2 As Workbook, sh As Worksheet, sNombre As String
  Set l2 = Workbooks("MACROS_LABORALES.xlsm")
  For Each sh In l2.Sheets
    If sh.CodeName = "NombreFijo" Then
      sNombre = sh.Name
      Exit For
    End If
  Next
  If sNombre <> "" Then
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(value(RC[-1]),'[" & l2.Name & "]" & sNombre & "'!R13C1:R210C11,2,0)"
  End If
End Sub

Otra forma de evitar cambios en los nombres de las hojas es protegiendo el libro:

Menú / Revisar / Proteger Libro

Respuesta
1

También puede evitar que cambien el nombre de la hoja, con esta macro en el código de la hoja puede logralo, al cambiarle de nombre a la hoja, el código devuelve el nombre original de la hoja.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Name = "Hoja1"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas