Sigo sin entender tu objetivo de cambiar el nombre de una hoja desde una celda.
Si modificas el nombre de la hoja, en automático todas las fórmulas que utilizan el nombre anterior, son actualizadas con el nombre nuevo.
Pero supongo que debes tener una buena razón.
Elimina los códigos anteriores.
Pon el siguiente código pero en los eventos de la hoja "GASTOS"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
Dim nuevo As String
Dim a As Variant, arr As Variant
'
If Target.Address(0, 0) = "A5" Then
If Target.CountLarge > 1 Then Exit Sub
nuevo = Target.Value
If nuevo = "" Then Exit Sub
If Len(nuevo) > 30 Then Exit Sub
'
arr = Array(":", "\", "/", "?", "*", "[", "]")
For Each a In arr
If InStr(1, nuevo, a) > 0 Then
MsgBox "El nuevo nombre no debe contener " & Join(arr, " "), vbCritical, "Cambiar nombre de hoja"
Exit Sub
End If
Next
'
For Each sh In Sheets
If LCase(sh.Range("R1").Formula) = LCase("=GASTOS!A5") Then
If LCase(sh.Name) <> LCase(nuevo) Then
If Evaluate("ISREF('" & nuevo & "'!A1)") Then
MsgBox "El nombre ya existe"
Else
sh.Name = nuevo
End If
End If
End If
Next
End If
End Sub
Sigue las Instrucciones para poner la macro en los eventos de worksheet
- Abre tu libro de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(GASTOS)
- En el panel del lado derecho copia la macro
Regresa a tu hoja GASTOS, cambia el dato en la celda A5, en automático el nombre de la hoja que en la celda R1 tiene la fórmula: "=GASTOS!A5" cambiará de nombre.