lunes, 20 de octubre de 2014

VBA: ¿Existe la ruta de archivo de mi función HIPERVINCULO?. La función VBA DIR.

Puede parecer una pregunta extraña.. pero tiene su sentido.
En ocasiones construimos unos vínculos o enlaces a otros archivos (para facilitar su apertura), empleando la función HIPERVINCULO (ver ejemplo), pero dejando la ubicación del archivo vinculado fija... posteriormente en el tiempo, estas ubicaciones de los archivos cambian y nuestra función HIPERVINCULO pierde su sentido y falla (error tipo: No se puede abrir el archivo especificado).


La solución será construir una sencilla macro que evalúe si la ruta empleada como argumento en la función HIPERVINCULO existe o no.
Veamoslo con un ejemplo, donde tenemos tres funciones con tres ubicaciones (dos existen y una tercera no):

VBA: ¿Existe la ruta de archivo de mi función HIPERVINCULO?. La función VBA DIR.



El código que insertaremos en un módulo del Explorador de proyectos del Editor de VBA:

Sub VerificarHipervinculo()
Dim ruta As String, ruta3 As String

'recorremos el rango de celdas con las funciones HIPERVINCULO
For Each celda In Range("C3:C5")
    'con estas variables extraemos la ruta del argumento
    ruta = Replace(celda.Formula, "=", "")
    pos1 = InStr(1, ruta, "(") + 2
    pos2 = InStr(1, ruta, ",") - 1
    ruta = Mid(ruta, pos1, pos2 - pos1)
    
    'con la función DIR verificamos si existe o no dicha ruta
    If Dir(ruta, vbArchive) <> "" Then
        MsgBox ruta & " existe"
    Else
        MsgBox ruta & " no existe"
    End If
Next celda

End Sub



Lo importante de este código es la función de VBA DIR que nos retorna un valor tipo String que representa el nombre de un archivo, directorio o carpeta que coincide con el patrón o atributo de archivo especificado, o la etiqueta de volumen de una unidad de disco; según los parámetros:
Constante Valor Descripción
vbNormal 0 Normal
vbReadOnly 1 De sólo lectura
vbHidden 2 Oculto
vbSystem 4 Archivo de sistema
vbVolume 8 Etiqueta de volumen
vbDirectory 16 Directorio o carpeta
vbArchive 32 El archivo ha cambiado desde la última copia de seguridad


Si la función DIR devuelve algún valor entonces implica que la ruta existe... de manera sencilla y práctica.
Si ejecutamos el procedimiento vemos los siguientes mensajes. Una ruta existente:

VBA: ¿Existe la ruta de archivo de mi función HIPERVINCULO?. La función VBA DIR.

Y una ruta no existente o fallida:

VBA: ¿Existe la ruta de archivo de mi función HIPERVINCULO?. La función VBA DIR.

No hay comentarios:

Publicar un comentario en la entrada