85 lines
3.1 KiB
HTML

<!-- ############### -->
<!-- 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 %}