<!-- ############### -->
<!-- 1 -->
<!-- ############### -->
<div class="img zoomable">
  <img src="/static/source_imgs/excel/pst_1/vba_index_sub_excel.webp" alt="">
</div>
<p>
  El objetivo de esta <a class="link" data-bs-toggle="modal" data-bs-target="#subrutina">subrutina</a>
  simple pero muy útil, generar un índice de todas las hojas que hay en el
  archivo y a su vez a cada hoja colocarle el hipervínculo que te mande a la hoja principal de índices.
</p>
<p>
  Para el uso de la sibrutina debes a agregar una hoja nueva de cálculo en tu archivo de excel que quieres indexar,
  esa hoja nueva debe estar completamente vacia y tener la primera posición de izquierda a derecha, dejas esa hoja
  activa (Imágen A), posteriormente abres el editor de código de <a class="link" data-bs-toggle="modal"
    data-bs-target="#vba"> Visual
    Basic for Applications (VBA) </a>, una vez dentro, en un módulo pegas el código de abajo y lo ejecutas.
</p>
<p>
  <b>Ejemplo: <br>Imagen A:</b>
</p>
<div class="img zoomable">
  <img src="/static/source_imgs/excel/pst_1/img_a.png" alt="Imagen A" class="zoom">
</div>
<p>
  <b>Imágen B:</b>
</p>
<div class="img zoomable">
  <img src="/static/source_imgs/excel/pst_1/img_b.png" alt="Imagen B" class="zoom">
</div>

{% set var1 %}
Sub asignar_link_hoja_mismo_libro()
' Declaración de las variables
Dim o As Object
Dim th, h As Integer
Dim lr As Long
Dim rng As Range

' obtener el número total de hojas de excel en el archivo abierto
th = Sheets.Count

' en la hoja 1, celda A1 se le asigna el valor de "índice hojas"
Sheets(1).Cells(1, 1).Value = "Índice Hojas"

' En esta ciclo se recorre el total de hojas
For h = 1 To th
	' empezamos la iteración de hojas a partir del indice 2 para obtener el nombre de las hojas.
	If h > 1 Then
		' el nombre de la hoja se coloca en la hoja 1 a partir de la celda 2
		Sheets(1).Cells(h, 1).Value = Sheets(h).Name
		' se selecciona la hoja para poder asignar el hipervínculo a la hoja 1
		Sheets(h).Activate
		' colocación del hipervínculo en la hoja activa
		ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="" & Sheets(1).Name & "!A1" & "", TextToDisplay:="Indice"
	End If
Next h
	
' Procesos en la hoja 1
Sheets(1).Activate
' del ciclo anterior obtenemos la última fila con registro
lr = Sheets(1).Cells(1048576, 1).End(xlUp).Row
' establecemos el rango donde se colocaron los nombres de las hojas del archivo de excel
Set rng = Sheets(1).Range(Cells(2, 1), Cells(lr, 1))

'en este ciclo creamos los hipervínculos
For Each o In rng
	' creamos el indice por cada nombre de hoja con su respectiva hoja
	Cells(o.Row, o.Column).Hyperlinks.Add Anchor:=Cells(o.Row, o.Column), Address:="", SubAddress:="'" & o.Value & "'!A1", TextToDisplay:=o.Value
Next o
' notificación al usuario del término del programa
MsgBox "Se ha creado el índice de hojas de forma exitosa", vbOKOnly, "INDICE HOJAS"
	
End Sub	
{% endset %}

{% with codigo=var1.strip(), isEditable="false" %}
{% include 'components/copy-code.html' %}
{% endwith %}





