Verificar hipervinculos en excel

21/06/2007 - 22:32 por Paolita | Informe spam
Hola amigos, resulta que tengo una planilla en excel y tengo muchos
hipervinculos a otros documentos, y muchos documentos han cambiado de
ruta... la pregunta es ¿?
existe alguna forma de validar que el hipervinculo esta bien?
tengo office 2003 y winXP
 

Leer las respuestas

#1 Héctor Miguel
21/06/2007 - 23:22 | Informe spam
hola, Paolita !

... tengo una planilla en excel y tengo muchos hipervinculos a otros documentos
... muchos documentos han cambiado de ruta... la pregunta es ?
existe alguna forma de validar que el hipervinculo esta bien? tengo office 2003 y winXP



[hasta donde se] no hay forma de que al pinchar sobre un hipervinculo se haga una verificacion previa del destino :-((
lo que si puedes hacer, es correr una rutina de verificacion y/o actualizacion de los enlaces 'perdidos' [antes de nada] :))
el siguiente ejemplo comprueba o elimina los hipervinculos cuyo enlace no se encuentra [deja solo el texto de la celda]

1) si son muchos vinculos 'rotos' [y/o la primera vez que se corra el proceso]... va a ser 'tardadito'
2) el siguiente ejemplo esta preparado para buscar los archvos 'perdidos' SOLO en unidades 'locales'
si necesitas buscar en unidades 'desmontables/flash/...' te incluyo los codigos aplicables para cada tipo de unidad
3) requiere llamar API's de windows y la funcion vba InStrRev

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

a) copia/pega lo siguiente en un modulo de codigo 'estandar/general/normal/...'

Sub Comprobar_Hipervinculos()
Dim Salto As Hyperlink, Archivo As String
With Worksheets("hoja1")
For Each Salto In .Hyperlinks
If Dir(Salto.Address) = "" Then
Archivo = Buscar_archivo( _
Mid(Salto.Address, InStrRev(Salto.Address, "\") + 1))
If Archivo <> "" Then
Salto.Address = Archivo
' .Range(Salto.Range.Address) = Archivo
Else
Salto.Delete
End If
End If
Next
End With
End Sub

2) copia lo siguiente en OTRO modulo de codigo 'estandar/general/normal/...'

Option Private Module
Declare Function Busca_en_FAT Lib "ImageHlp.dll" Alias "SearchTreeForFile" _
(ByVal Unidad As String, ByVal Archivo As String, ByVal Reserva As String) As Long
Function Buscar_archivo(ByVal Archivo As String)
Dim Disco As Object, Unidad As String: Buscar_archivo = ""
With CreateObject("Scripting.FileSystemObject")
For Each Disco In .Drives
If Disco.DriveType = 2 Then
Unidad = Disco.DriveLetter & ":\": Buscar_archivo = Buscar(Unidad, Archivo)
If Buscar_archivo <> "" Then Exit For
End If: Next: End With
End Function
' Tipos para Disco.DriveType _
0 = "Desconocido" _
1 = "Desmontable" _
2 = "Fijo" _
3 = "Unidad de red" _
4 = "CD-ROM" _
5 = "Disco RAM"
Function Buscar(Unidad As String, Archivo As String) As String
Dim Pos As Long, Tmp As Long, Reserva As String: On Error GoTo No_existe
Reserva = Space(260): Tmp = Busca_en_FAT(Unidad, Archivo, Reserva)
Pos = InStr(Reserva, vbNullChar)
If Not Pos Then Reserva = Left(Reserva, Pos - 1)
Buscar = Reserva: Exit Function
No_existe:
End Function

Preguntas similares