Generar hipervínculos automáticamente para luego buscar y abrirlo mediante un formulario de búsqueda

Tengo un problemita que me esta dando dolor de cabeza, jejejej... Necesito generar hipervínculos de unos archivos pdf, para luego poder buscarlo y abrirlo mediante un formulario de búsqueda. El problema es más o menos así...

Estoy haciendo una base de datos de todas las adquisiciones de una pequeña empresa, uno de esos campos (columna) indica el numero de documento (factura, boleta o guía de despacho) y a su vez, cada documento se encuentra digitalizado en formato pdf en una carpeta "C:\facturas" con nombre del numero de documento.pdf o sea... Ej. Factura 2345 tiene su respectivo 2345.pdf

Ahora bien... Tengo dos códigos

Uno que me pasó Richard Villarroel, para generar los hipervínculos en forma automática con el nombre del nombre en pdf

=HIPERVINCULO(TEXTO(C2; "@") & ".PDF";C2)

Este código funciona bien, crea el hipervínculo y puede abrirse el pdf al pinchar sobre la celda.

Aparte, tengo este código creado por Dante Amor, que busca el nombre de la celda y lo abre como hipervínculo. Que también funciona muy bien...

Private Sub CommandButton1_Click()
Worksheets("Compras").Activate
Set resp = Cells.Find(What:=TextBox1.Text, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If resp Is Nothing Then
Worksheets("Menu").Activate
MsgBox ("NO SE ENCONTRÓ EL DOCUMENTO Nº " & TextBox1.Value), vbInformation
Else
resp.Activate
ActiveCell.Offset(0, 0).Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=False
End If
TextBox1 = ""
TextBox1.SetFocus
End Sub
Private Sub CommandButton2_Click()
Unload Me
Worksheets("Menu").Activate
End Sub

Private Sub Label1_Click()

End Sub

¿Ahora cuál es el problema? Es que no consigo hacerlos funcionar en conjunto, es decir, el código que genera los hipervínculos automáticamente, los puedo abrir manualmente, pero no consigo abrirlos desde el buscador (dice que no se encuentra el archivo) y por otro lado, el buscador solo abre los hipervínculos creados de forma manual. ¿Se podrá hacer algo más automático? ¿Una mezcla de ambos códigos?

1 respuesta

Respuesta
1

Vamos con la respuesta... (Y)

Primero... creamos un Form vacío, de nombre pdfform y lo suficientemente grande como para mostrar nuestro pdf.

Segundo, agregamos un modulo... con el siguiente código

Sub LoadPDF(FicPdf As String, NoPage As Integer)
'Object creation
Set mObjPDF = PdfForm.Controls.Add("AcroPDF.PDF.1", "VisuPDF")
ch = mObjPDF.src
'get the acrobat version
ver = mObjPDF.GetVersions
'Window object parameters
With PdfForm.Controls("VisuPDF")
.Visible = True
'Height and width of the window
.Height = PdfForm.Height - 20
.Width = PdfForm.Width - 5
'mObjPDF.setViewRect 0, 0, 650, 580
End With
'Parameters of the object AcroPdf
With mObjPDF
.src = FicPdf 'Filename or URL
.setShowScrollbars (True)
.setShowToolbar (True)
.setPageMode ("none") 'none/bookmarks/thumbs
.setLayoutMode ("SinglePage") 'DontCare/SinglePage/OneColumn/TwoColumnLeft/TwoColumnRight
.setCurrentPage (NoPage) 'Page number
.setView ("Fit") 'Fit/FitH/FitV/FitB/FitBH/FitB
.setZoom (100)
End With
PdfForm.Show
End Sub

Y tercero...

Asignamos el siguiente codigo a nuestro botón de busqueda

Private Sub CommandButton1_Click()
If TextBox1 = "" Then
MsgBox "Ingrese Numero de Documento", vbInformation, "Mach Chile Limitada"
TextBox1.SetFocus
Else
Worksheets("MachChile").Select
'Por.Dante Amor
Set h1 = Worksheets("MachChile")
Set b = h1.Range("c2:c9999").Find(TextBox1.Text, lookat:=xlWhole)
If b Is Nothing Then
MsgBox "No se ha encontrado el documento Nº " & TextBox1.Value, vbExclamation, "Mach Chile Limitada"
TextBox1 = ""
TextBox1.SetFocus
Else
Dim s As String
Dim wf As String
wf = Application.ActiveWorkbook.Path
s = wf & "\Facturas\" & b & ".pdf"
Debug.Print "File to open: " & s
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(s) Then
LoadPDF s, 1
TextBox1.SetFocus
Else
MsgBox "El archivo no se encuentra digitalizado", vbInformation, "Mach Chile Limitada"
TextBox1 = ""
TextBox1.SetFocus
End If
End If
End If
End Sub

Listo, tenemos la creación automática de cada Archivo PDF, de igual nombre al valor de la celda C, tenemos un cuadro de búsqueda, cuando encuentra el valor verifica si existe el archivo "C.pdf" en la carpeta especificada, si existe lo abre, si encuentra el valor pero no existe el archivo, envía el mensaje que el documento no se encuentra digitalizado, y para terminar, si no encuentra el valor en la columna "C" muestra el mensaje correspondiente de que no se ha encontrado el documento Nº "C".

Cabe señalar, que debemos tener instalado el Acrobat Reader, la version Clásica y no la DC... Otro dato, por si llegan a tener algún error de librería, activen en las referencias :

- Adobe Acrobat Browser Control

- Adobe Reader File Preview

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas