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.

3 comentarios:

  1. Ismael, es justo lo que necesito, pero como tengo escasos conocimientos de VBA, no soy capaz de interpretar cuáles son los nombres de las hojas donde traslada los datos la macro y los rangos de las tablas donde los pone. ¿Podrías colgar un ejemplo en excel? Muchísimas gracias.

    ResponderEliminar
    Respuestas
    1. Hola José Antonio,
      esos listados que aparecen en la última imagen no los lista la macro, es una acción manual desde la ficha fórmulas > grupo Nombres definidos > botón Utilizar en la fórmula > opción Pegar Nombre > y en la ventana que aparezca Pegar lista.

      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.