Per aprire un file PDF in VB6/VBA, con il programma predefinito (solitamente Acrobat Reader), è possibile utilizzare il seguente codice:
' Sezione dichiarazioni Public Declare Function ShellExecute _ Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpszOp As String, _ ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal LpszDir As String, ByVal FsShowCmd As Long) As Long Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Sub ApriPDF(NomeFile As String) Const SW_SHOWNORMAL As Long = 1 Const ERROR_BAD_FORMAT As Long = 11 Const SE_ERR_ACCESSDENIED As Long = 5 Const SE_ERR_ASSOCINCOMPLETE As Long = 27 Const SE_ERR_DDEBUSY As Long = 30 Const SE_ERR_DDEFAIL As Long = 29 Const SE_ERR_DDETIMEOUT As Long = 28 Const SE_ERR_DLLNOTFOUND As Long = 32 Const SE_ERR_FNF As Long = 2 ' file non trovato Const SE_ERR_NOASSOC As Long = 31 Const SE_ERR_PNF As Long = 3 ' percorso non trovato Const SE_ERR_OOM As Long = 8 ' memoria esaurita Const SE_ERR_SHARE As Long = 26 Dim Scr_hDC As Long Dim ret As Long Dim sMsg As String Dim risposta As Long Scr_hDC = GetDesktopWindow() ret = ShellExecute(Scr_hDC, "Open", _ App.Path & "\RELAZIONI\" & _ NomeFile, "", App.Path & _ "\RELAZIONI", SW_SHOWNORMAL) If ret <= 32 Then ' Si è verificato un errore Select Case ret Case SE_ERR_FNF sMsg = "File non trovato" Case SE_ERR_PNF sMsg = "Percorso non trovato" Case SE_ERR_ACCESSDENIED sMsg = "Accesso negato" Case SE_ERR_OOM sMsg = "Memoria esaurita" Case SE_ERR_DLLNOTFOUND sMsg = "DLL non trovata" Case SE_ERR_SHARE sMsg = "Violazione di condivisione" Case SE_ERR_ASSOCINCOMPLETE sMsg = "Associazione di file " & _ incompleta o non valida" Case SE_ERR_DDETIMEOUT sMsg = "DDE Time out" Case SE_ERR_DDEFAIL sMsg = "DDE transazione fallita" Case SE_ERR_DDEBUSY sMsg = "DDE occupato" Case SE_ERR_NOASSOC sMsg = "Nessuna associazione per " & _ "l'estensione del file" Case ERROR_BAD_FORMAT sMsg = "File EXE non valido o errore " & _ "nell'immagine EXE" Case Else sMsg = "Errore sconosciuto" End Select If ret = 31 Then ' non è installato Acrobat Reader risposta = MsgBox("ATTENZIONE: in questo sistema " & _ "non è installato Acrobat Reader, necessario " & _ "per visualizzare documenti PDF." & vbCrLf & vbCrLf & _ "Per installare Acrobat Reader (vers. 5.1 italiana): " & _ "premere SI" & vbCrLf & "Per annullare l'apertura " & _ "del documento PDF: premere NO", _ vbYesNo Or vbCritical, "Installare Acrobat Reader?") If risposta = vbYes Then ' risposta = SI ' ATTENZIONE: se il programma di setup di Acrobat Reader ' si trova in un altro percorso, modificare l'istruzione ' seguente Shell App.Path & "\SETUP\AdbeRdr60_ita_full_WinXP.exe", _ vbNormalFocus Else ' risposta = NO MsgBox "Apertura documento PDF annullata.", vbInformation End If Else ret = MsgBox("ERRORE: n. " & ret & " - " & _ sMsg, vbCritical, "ApriPDF") End If End If End Sub
Ti ringrazio per il codice. Avevo un sacco di problemi con l’utilizzo delle DLL di acrobat per la sola visualizzazione di pdf (cambiano le dll al cambiare della versione) e il tuo codice mi ha risolto il problama in modo pulito.
Ciao e Grazie.
"Mi piace""Mi piace"
Sono felice che questo articolo ti sia stato utile e grazie per avermelo fatto sapere! 🙂
"Mi piace""Mi piace"
Scusa ma inserendo il codice su VS 2005 mi da errore su App dicendomi che non è definita…. devo includere qualche libreria in particolare?
"Mi piace""Mi piace"
Il codice pubblicato in questo post si riferisce a VB 6.0 oppure a VBA (es. in Access) non a Visual Basic .NET/2005/2008, come specificato all’inizio del post stesso.
Per aprire un PDF in VB.NET è molto più semplice: basta utilizzare Process.Start, passandogli un oggetto ProcessStartInfo opportunamente inizializzato.
Per esempio per stampare un file PDF puoi utilizzare una procedura come quella spiegata qui:
http://www.eggheadcafe.com/software/aspnet/30193766/printing-pdf-from-vbnet.aspx
🙂
"Mi piace""Mi piace"
Grazie per la risposta e per il link ma soprattutto per la celerità!!!
Scusa per l’ignoranza ma sopra al titolo del tuo post c’è la dicitura:
Flash Control for ASP.NET 2.0
Ancora grazie mille!!
Ciao.
"Mi piace""Mi piace"
Quello è il link all’articolo precedente (in ordine cronologico) 🙂
Nella riga dopo vedi “#14 Aprire un file PDF”
Poi “Pubblicato da …”
… e infine “Per aprire un file PDF in VB6/VBA …”
🙂
Ciao
"Mi piace""Mi piace"
Ho messo in un modulo il tuo codice, poi nel form principale creato un tasto con il seguente codice:
Private Sub Command1_Click()
Dim Nome As String
Nome = App.Path & “\prova.pdf”
MsgBox Nome
ApriPDF(Nome)
End Sub
Quando premo il tasto, mi dice:
“Errore di compilazione: prevista variabile o routine e non modulo”
Uso VB6 e ho imparato con il “fai da te” potresti aiutarmi?
"Mi piace""Mi piace"
Ho risolto, con questo comando applicato ad un bottone, apro tutti i file che mi interessano con il programma predefinito di windows!
Private Sub BT_SchedaTecnica_Click()
Shell “rundll32.exe url.dll,FileProtocolHandler ” & (TXT_FileTecnica), vbMaximizedFocus
End Sub
"Mi piace""Mi piace"
Se posso vorrei fare una domanda, se ho archiviato in Access dei file PDF (tramite campo OLE)come posso fare per visualizzare i file PDF con vb.net.
P.S. sto leggendo il tuo libro, ma sull’argomento database in genere non c’è molto.
"Mi piace""Mi piace"
Ciao! Avrei la necessità di stampare un grande quantità di file PDF che risiedono su web (nello specifico una intranet aziendale) che codice vba per access o meglio excel potrei usare, tenendo conto che ho una tabella con tutti i link?
Grazie
"Mi piace""Mi piace"
Ciao! Ti consiglio di utilizzare questo progetto:
http://www.codeproject.com/Articles/9858/100-NET-component-for-rendering-PDF-documents
Permette di creare nuovi file PDF, di trasformare un PDF in immagini e di stampare PDF esistenti sulla stampante.
Buon lavoro!
"Mi piace""Mi piace"