jueves, 22 de mayo de 2014

VBA: Renombrar los Nombres definidos.

La idea de hoy es renombrar fácilmente los Nombres definidos creados en nuestro Libro, para seguir una regla concreta.. y así agilizar nuestras fórmulas, referencias, etc.

Partiremos, para nuestro ejemplo, de tres Nombres definidos:

VBA: Renombrar los Nombres definidos.



Para modificar los Nombres actuales haremos una acción algo 'retorcida', ya que en primer lugar, con una Function (NombreValores) trasladaremos el Nombre y el rango a que se refiere cada Nombre definido, a una matriz.. para posteriormente recuperarla con un procedimiento Sub (RenombrarNombreDefinidos), donde, en base a los datos guardados en la function, iremos eliminando cada Nombre existente y reemplezándolo con los nuevos datos.

En un módulo del proyecto de VBA para nuestro Libro de trabajo, dentro del Editor de VB:

Function NombreValores() As String()
Dim NV As Name
Dim i As Integer
Dim arrNV() As String

'redefinimos la dimensión del Array
ReDim arrNV(1 To Names.Count, 1 To 2)
 
i = 1
'recorremos los diferentes nombres definidos
'y cargamos la matriz....
For Each NV In Names
    arrNV(i, 1) = NV.Name
    arrNV(i, 2) = NV.RefersTo
    i = i + 1
Next
NombreValores = arrNV
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub RenombrarNombreDefinidos()

Dim NVs() As String
Dim i As Integer
Dim NuevoNombre As String
Dim SheetName As String

'llamamos a la Function creada más arriba...
'y rellenamos la matriz/array NVs con los valores de la Function
NVs = NombreValores()

'recorremos los valores de la matriz generada con valores de los Nombres
For i = 1 To UBound(NVs)
    'definimos la norma para el nuevo nombre a partir del viejo
    'tres caracteres del nombre actual y un numerador.
    NuevoNombre = Left(NVs(i, 1), 3) & "_" & i
    'borramos el 'viejo nombre'
    ActiveWorkbook.Names(NVs(i, 1)).Delete
    'Creamos el nuevo nombre definido (con el nuevo nombre)
    ActiveWorkbook.Names.Add Name:=NuevoNombre, RefersTo:=NVs(i, 2)
Next i

End Sub



Como vemos, realmente no estamos renombrando, si no que eliminamos primero y luego contruimos...
Lo que me parece interesante es el empleo de matrices/arrays para guardar la información y su posterior uso.
El resultado es el esperado:

VBA: Renombrar los Nombres definidos.

No hay comentarios:

Publicar un comentario en la entrada