Anteprima dei documenti nel modulo di Microsoft Access
Ambito del progetto
Di recente abbiamo aggiunto un centro documenti a un progetto che consente agli utenti di allegare documenti come pdf, word, txt e immagini a un progetto. Inoltre avranno un processo automatico impostato per leggere le e-mail in arrivo e salvare gli allegati e-mail su un'unità di rete. L'obiettivo è consentire all'utente di visualizzare i nuovi documenti ricevuti e salvarli nella posizione corretta. Ovviamente gestiremo il processo per estrarre informazioni come l'oggetto e da chi proviene il documento per consentire all'utente di comprendere le informazioni generali del documento e queste verranno salvate in una tabella. Inoltre l'utente deve poter visualizzare il documento per leggerne il contenuto.
Soluzione
Ovviamente possiamo avviare altre applicazioni dall'accesso per visualizzare i documenti di Word in Word e pdf in Adobe Acrobat ecc. Tuttavia, quando un utente ha solo uno schermo con cui lavorare, questo significa passare da un'applicazione all'altra e se ci sono più tipi di documenti allora di ovviamente questo significa aprire più applicazioni. Abbiamo quindi fornito una soluzione semplice che avrebbe avviato il documento in un nuovo modulo di accesso con layout a schede che consentisse all'utente di gestire facilmente il sistema. Nell'esempio seguente sto usando il codice che leggerà il file da un determinato percorso, a cui l'utente dovrà accedere sul proprio computer. In alternativa, se il documento viene salvato in una tabella SQL, possiamo modificare il codice per salvare temporaneamente il documento su un'unità locale e avviare il file dalla posizione temporanea. Se utilizzi questo metodo, vorresti anche includere un codice aggiuntivo per eliminare il file temporaneo dopo aver visualizzato/chiuso il modulo.
Esempio di modulo
Il modulo di esempio fornito dovrebbe essere lanciato passando il percorso del documento in OpenArgs
DoCmd.OpenForm "frmDocumentReview", OpenArgs:= Me.DocumentPath
Il codice di caricamento verifica che il percorso sia stato passato e anche se il file esiste. Se tutto va bene, il processo continua.
Private Sub Form_Load() If IsNull(Me.OpenArgs) Then MsgBox "No document to show", , "Path not specified" Exit Sub Else If Not FSO.FileExists(Me.OpenArgs) Then MsgBox "Your computer does not have access to the named file. You need to download the file to view it." Exit Sub Else Showdocument OpenArgs End If End If End Sub
Infine il codice carica il documento. Il sub Showdocument si occupa dei diversi tipi di documento. La maggior parte dei tipi di documenti utilizza il caso else. Il modulo stesso ha una casella di testo nascosta chiamata txtPath che memorizza il valore di OpenArgs (nome file e percorso) può essere un'unità mappata o UNC. L'oggetto browser web memorizza =[txtPath] come fonte di controllo. Tuttavia, i documenti Word non funzionano allo stesso modo e devi prima salvare il documento come html. Ho usato un metodo originariamente scritto da Crystal Long e ho apportato alcune modifiche minori.
Private Sub Showdocument(strPath As String) Dim strExt As String Dim sPathFileHTML As String Dim oWordApp As Object Dim oDoc As Object strExt = GetFileExt(strPath) Select Case strExt Case "docx" 'save word doc as HTML sPathFileHTML = CurrentProject.Path & "\temp.html" Set oWordApp = CreateObject("Word.Application") Set oDoc = oWordApp.Documents.Open(strPath) oDoc.SaveAs2 FileName:=sPathFileHTML, FileFormat:=8 'wdFormatHTML oDoc.Close False oWordApp.Quit Set oDoc = Nothing Set oWordApp = Nothing Case Else sPathFileHTML = strPath End Select 'open in browser control Me.txtPath.Value = sPathFileHTML End Sub