martes, 18 de abril de 2023

72 - Modificar hipervínculos masivamente.

 Cuando tenemos en un libro Excel vínculos hacia otras hojas u otras referencias de fila/columna, nos encontramos con el problema de que al moverlos siguen conectados al origen. 

Así, por ejemplo, si tenemos una hoja como en la siguiente imagen, donde cada vínculo nos lleva a un cuadro dentro de la Hoja1, al copiar esa hoja y asignarle otro nombre el vínculo siempre nos dirige a la hoja de origen, o sea a la Hoja1.

Para resolver esta situación, utilizaremos una macro de pocas instrucciones, donde vamos a cambiar el argumento SubAddress, o sea la dirección del vínculo. 

Y además, en este ejemplo, modificaremos otros 2 argumentos: 

. ScreenTip (el texto que se muestra al pasar el mousse por encima del vínculo) y 

. TextToDisplay (el texto o valor que se muestra en la celda).


En un módulo copiaremos esta macro:

Sub ModificarHipervinculos()        'modificar los hipervínculos dirigiéndolos a otra hoja

'x Elsamatilde

Dim anterior As String, nuevo As String, nvaDire As String, cadena As String

Dim x As Integer, y As Integer

Application.ScreenUpdating = False

anterior = "Hoja1": nuevo = ActiveSheet.Name     'nombres de hojas

Range("O:O").Clear                              'limpia col auxiliar

y = Range("A" & Rows.Count).End(xlUp).Row    'recorre la col A que tiene los hipervínculos a modificar

For x = 4 To y

    Range("O" & x) = Range("A" & x).Hyperlinks(1).SubAddress        'coloca en col auxiliar el hipervínculo

    Range("O" & x).Replace What:=anterior, Replacement:=nuevo       'reemplaza el texto anterior por el nuevo

    Range("A" & x).Select                                           'vuelve a crear el hipervínculo en la col donde se encontraba

    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _

    SubAddress:=nvaDire, _

    ScreenTip:=cadena, _

    TextToDisplay:=ActiveCell.Text

Next x

MsgBox "Fin del proceso."

End Sub

Luego se podrá ejecutar desde el menú Programador/Desarrollador estando en la hoja activa, es decir, donde se encuentra la lista de vínculos que deseamos actualizar.

NOTA: podemos incluir el valor de las variables directamente en la instrucción del Hyperlink, quedándonos así:

ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _

    SubAddress:=Range("O" & x), _

    ScreenTip:=ActiveSheet.Name & "-" & Range("A" & x), _

    TextToDisplay:=ActiveCell.Text


El libro de ejemplo se puede descargar desde este enlace o solicitarlo al correo: cibersoft_arg@gmail.com

Ver video Nº 72 con el paso a paso desde aquí.