viernes, 24 de abril de 2020

Abrir documentos vinculados desde Excel

En la entrada anterior (Hipervínculos-vínculos) vimos cómo guardar hipervínculos a sitios web, desde un control de Userform, y así poder llamarlos haciendo clic en la celda que contendrá ese enlace.
También vimos cómo vincular archivos de imagen a registros de una base de cualquier índole. Esta opción nos permite luego insertar esas imágenes en otros procesos Excel.
En esos casos utilizamos las instrucciones Hyperlink.Add y GetOpenFilename respectivamente.

Ahora vamos a ver cómo guardar nombre y dirección de documentos asociados a registros de una base. Utilizaremos nuevamente estas 2 instrucciones anteriores.
Además veremos otra macro para abrir esos archivos vinculados con un simple atajo de teclado. La instrucción utilizada será: FollowHyperlink.

Para ello partimos de una hoja base donde tendremos códigos e información de documentos y una columna para guardar el nombre del mismo (en pdf, doc o cualquier otro formato). Además guardaremos la ubicación de esos archivos en otra columna o en una celda auxiliar.

Utilizaré un Userform con controles para rellenar las columnas de datos, un botón para BUSCAR el archivo asociado y 2 botones de guardado, ya sea que guardemos la ubicación como hipervínculo (se llamará desde el mismo enlace) o la guardaremos separando nombre del archivo y su ruta. Luego tendremos una macro para llamar y abrir el documento elegido.
La macro del botón BUSCAR será la siguiente:
Private Sub CommandButton11_Click()    'BUSCAR
miDoc = Application.GetOpenFilename(Title:="Selecciona tu archivo")
'si la variable está vacía significa que cancelamos la ventana de diálogo
If miDoc = False Then
    TextBox2 = ""
Else
    TextBox2 = miDoc
End If
End Sub

Para GUARDAR los registros tendremos 2 opciones: como hipervínculo o como nombre+ubicación del archivo.
Private Sub CommandButton1_Click()   'GUARDAR con hipervínculo
With Sheets("Hoja3")
    x = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & x) = Application.WorksheetFunction.Max(.Range("A:A")) + 1
    .Range("B" & x) = TextBox1
    .Range("C" & x) = ComboBox2
    .Range("D" & x) = ComboBox1
    .Range("E" & x) = TextBox2
    'hipervínculo en celda col E
    If TextBox2 <> "" Then _
        .Hyperlinks.Add Anchor:=.Range("E" & x), Address:=.Range("E" & x).Value, _
            ScreenTip:="ver doc", TextToDisplay:=.Range("E" & x).Value
End With
'limpia controles para un nuevo registro
ComboBox1.ListIndex = -1: ComboBox2.ListIndex = -1
TextBox1 = "": TextBox2 = ""
TextBox1.SetFocus
End Sub

Private Sub CommandButton2_Click()   'guardar solo nbre archivo
    With Sheets("Hoja3")
    x = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & x) = Application.WorksheetFunction.Max(.Range("A:A")) + 1
    .Range("B" & x) = TextBox1
    .Range("C" & x) = ComboBox2
    .Range("D" & x) = ComboBox1
    'guardar nbre de archivo
    .Range("E" & x) = Dir(TextBox2)     'solo nombre del archivo
    'obtener la ruta
    '.Range("F" & x) = Left(TextBox2, InStr(1, TextBox2, Dir(TextBox2)) - 1)
End With
'limpia controles para un nuevo registro
ComboBox1.ListIndex = -1: ComboBox2.ListIndex = -1
TextBox1 = "": TextBox2 = ""
TextBox1.SetFocus
End Sub
En caso de haber guardado la ubicación del archivo relacionado como hipervínculo no necesitaremos ninguna macro para abrir ese documento. Con hacer clic sobre la celda de la col E será suficiente.
En cambio si guardamos el nombre+ubicación podemos llamarlos desde la siguiente macro. Para mayor comodidad le asignamos un atajo de teclado.
La macro se ubica en un módulo y se ejecutará estando seleccionada alguna celda de la col B y que no esté vacía.

Sub abriendoArchivo()
'ATAJO DE TECLADO: CTRL f
'solo se ejecuta con celda seleccionada en col B
If ActiveCell.Column <> 2 Or ActiveCell = "" Then Exit Sub
'asignamos la ruta o carpeta donde se encuentran los PDF.
'Optar por una de las 3 instrucciones
'ruta = ThisWorkbook.Path & "\ESCANEADOS\"   'en subcarpeta del libro activo
ruta = [F1]                                                                   'en celda auxiliar F1
'ruta = ActiveCell.Offset(0, 4)                                    'en col F del registro
On Error Resume Next
ActiveWorkbook.FollowHyperlink ruta & ActiveCell.Offset(0, 3)
End Sub

'otra opción podría ser evaluar si col F está vacía y en ese caso tomar la ruta indicada en F1.
'If ActiveCell.Offset(0, 4) = "" Then
    'ruta = [F1]
'Else
   ' ruta = ActiveCell.Offset(0, 4)
'End If

Descargar libro de ejemplos desde aquí
Ver VIDEO 34.

No hay comentarios.:

Publicar un comentario