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.