Crear un índice en Excel con VBA

Es muy recomendable crear un índice en Excel sobretodo cuando no podemos ver todas las hojas por su número o por el largo de sus nombres. De esa forma, al crear un índice en Excel, podemos ver de un vistazo su contenido y navegar por el fichero con toda facilidad. Si incluimos algún dato relevante de cada una de las hojas, nuestro índice puede convertirse en un verdadero resumen que facilita la comprensión del trabajo realizado. Tanto para nosotros como para terceros a los que  se lo enviemos.

Dos conceptos básicos

Antes de lanzarnos a crear un índice en Excel necesitamos conocer dos conceptos de programación en VBA muy sencillos, es el caso de los bucles.

Para poder crear un índice en Excel necesitaremos recorrer todas las hojas del libro de Excel, para ello usaremos el bucle For Next y también usaremos el bucle For Each.

Además, necesitaremos conocer el funcionamiento de los hipervínculos en VBA. Esto es muy sencillo. Al objeto hoja le añadimos un hipervínculo mediante la secuencia:

ActiveSheet.Hyperlinks.Add

Crear un índice en Excel

Pero en estos casos la labor es muy tediosa y aquí VBA nos ayuda. Con el código siguiente se puede crear muy fácilmente un índice estupendo que además crea un enlace a cada una de las hojas:

Option Explicit
Option Base 1

Sub Nombre_hojas()

'Esta macro escribe el nombre de las hojas en la hoja "Resumen"
' y crea un hipervínculo a cada una

'Declaro las variables
Dim x As Integer
Dim y As Integer
Dim NombreHojas As Range
Dim RefHyperv As String
Dim RefHypText As String
Dim wh As Worksheet

'Cuenta el número de hojas en el libro en el que trabajo
y = ActiveWorkbook.Worksheets.Count

'Creo el rango de destino de los nombres
Set NombreHojas = Sheets("Hoja1").Range(Cells(2, 2), Cells(y + 1, 2))

'Creo el loop para rellenar el RangoHojas
For Each wh In ActiveWorkbook.Worksheets
    
    x = x + 1
    NombreHojas(x) = wh.Name
    
Next

'Creo el loop para crear los hipervínculos

'Inicilializo x porque voy a reusar la variable
x = 0

Worksheets("Hoja1").Select

'No creo un hipervínculo para la Hoja1 porque es la hoja contenedora del resumen
For x = 2 To y

    RefHyperv = NombreHojas(x) & "!A1"
    RefHypText = NombreHojas(x)
    ActiveSheet.Hyperlinks.Add Anchor:=NombreHojas(x), Address:="", _
    SubAddress:=RefHyperv, TextToDisplay:=RefHypText

Next

'Cambio el nombre a la hoja en la que están los nombres de hojas enlazados
ActiveSheet.Name = "Resumen"
NombreHojas(1) = "Resumen"

End Sub

Se trata de crear un par de bucles: uno para recoger el nombre de la hoja y otra para crear el enlace y, al fin, renombrar la hoja en la que se contiene el índice.

El código que hemos creado es muy estandar para que lo puedas reusar sin ninguna personalización.

(Visited 7.976 times, 1 visits today)

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies