In un applicazione access utilizzo una funzione di stampa unione di documenti word, usando il seguente codice:
Sub StampaUnione(pNomeDoc As String, pNomeDB As String, pNomeOrigine As String, Optional pSave As String, Optional pDest As String)
' Esegue la stampa unione di un documento Word
'
' Parametri in ingresso:
'
' pNomeDoc : Nome, completo di percorso, del documento Word da stampare
' pNomeDB : Nome del database che contiene l'origine dati da unire al documento
' pNomeOrigine : Nome dell'origine dati contenuta in pNomeDB
' pSave : Opzione per salvataggio documento: S=Salva, N=Non salva, P=Chiede se salvare
' pDest : Destinazione stampa unione: S=Stampante, F=Fax, M=e-mail, D=Documento
On Error GoTo Err_StampaUnione
Dim appWrd As Object, wrdDoc As Object, nDest As Byte, nSave As Long
Const wdMainAndDataSource As Byte = 2
Const wdDoNotSaveChanges As Long = 0, wdSaveChanges As Long = -1, wdPromptToSaveChanges As Long = -2
Const wdSendToEmail As Byte = 2, wdSendToFax As Byte = 3, wdSendToNewDocument As Byte = 0, wdSendToPrinter As Byte = 1
If Dir(pNomeDoc) = "" Then
MsgBox "Il documento " & vbCrLf & pNomeDoc & vbCrLf & " non è stato trovato", vbCritical + vbYesNo
Exit Sub
End If
If Dir(pNomeDB) = "" Then
MsgBox "Il database " & vbCrLf & pNomeDB & vbCrLf & " non è stato trovato", vbCritical + vbYesNo
Exit Sub
End If
If IsMissing(pSave) Then pSave = "N" ' Per default NON salva il documento
Select Case pSave
Case Is = "S"
nSave = wdSaveChanges
Case Is = "N"
nSave = wdDoNotSaveChanges
Case Is = "P"
nSave = wdPromptToSaveChanges
End Select
If IsMissing(pDest) Then pDest = "S" ' Per default invia il documento alla stampante
Select Case pDest
Case Is = "S"
nDest = wdSendToPrinter
Case Is = "F"
nDest = wdSendToFax
Case Is = "M"
nDest = wdSendToEmail
Case Is = "D"
nDest = wdSendToNewDocument
End Select
' Apre Word
Set appWrd = GetObject(, "Word.Application")
appWrd.Visible = True
' Apre il documento Word selezionato
Set wrdDoc = appWrd.Documents.Open(pNomeDoc, True, False)
wrdDoc.MailMerge.OpenDataSource pNomeDB, , , , True, False, , , , , , pNomeOrigine
' Esegue la stampa unione
wrdDoc.MailMerge.Destination = nDest
wrdDoc.MailMerge.Execute
' Chiude il documento
wrdDoc.Close (nSave)
' Chiude Word
' appWrd.DDETerminateAll
' appWrd.Quit
' Set wrdDoc = Nothing
' Set appWrd = Nothing
Exit Sub
Err_StampaUnione:
Select Case Err.Number
Case 429
'se c'è stato un errore è perchè Word non era già aperto lo apre
Set appWrd = CreateObject("Word.Application")
Resume Next
Case Else
MsgBox "Errore n° " & Err.Number & ": " & Err.Description
End Select
End Sub
Ho 2 Problemi:
- Volevo sapere se fosse possibile fare la stampa unione anche di documenti di OpenOffice, con il codice che utilizzo non funziona..!!
- Ho dei problemi utilizzando la versione di word starter, mi d'ha il messaggio di errore che non trova il controllo activeX...