Stampa unione di documenti word da codice VBA

Anonimo
2012-01-03T16:39:08+00:00

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:

  1. Volevo sapere se fosse possibile fare la stampa unione anche di documenti di OpenOffice, con il codice che utilizzo non funziona..!!
  2. Ho dei problemi utilizzando la versione di word starter, mi d'ha il messaggio di errore che non trova il controllo activeX...
Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-01-04T07:35:22+00:00

Ciao Cinzia:

  1. Posso modificare il mio codice in modo che possa funzionare anche con OpenOffice..? Se si, sai come posso fare la stampa unione con un file di OpenOffice..?
  2. In realtà il mio db al momento è in mde, ho notato che anche l'mde non può essere aperto, tuttavia se faccio la stampa unione manualmente da un documento di word, funziona, come mai..?

Grazie

Chiedi in questo newsgroup: it-alt.comp.software.openoffice

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-05-16T09:55:18+00:00

    ciao

    sto cercando di lanciare anchio una stampa unione tramite un pulsante presente in una maschera, cercando di evitare di dover impostare ogni volta l'origine dati ed altro...

    ho inserito il codice da te postato ma probabilmente sabglio nell'impostare i parametri in ingresso...

    riuscieresti a dirmi o meglio con un esempio pratico come impostare i paramentri in ingresso ??

    Grazie

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2012-01-03T21:46:42+00:00

    Ciao Matteo,

    sul punto 1) non posso aiutarti, non conosco a fondo OpenOffice, ma dubito molto che tu possa "pilotarlo" da VBA

    1. non ho Word Starter da nessuna parte x cui non riesco a simulare la situazione, sarebbe utile se riuscissi a capire su quale riga da l' errore, ho il dubbio che tra i limiti della starter ci sia anche il fatto di non esssere "automatizzabile".

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-01-03T17:29:32+00:00

    Ciao Cinzia:

    1. Posso modificare il mio codice in modo che possa funzionare anche con OpenOffice..? Se si, sai come posso fare la stampa unione con un file di OpenOffice..?
    2. In realtà il mio db al momento è in mde, ho notato che anche l'mde non può essere aperto, tuttavia se faccio la stampa unione manualmente da un documento di word, funziona, come mai..?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-01-03T16:51:38+00:00

    Ciao Matteo,

    1. no questo codice sfrutta l'automazione di Word e pertanto non può funzionare con OpenOffice.
    2. qui trovi i limiti di Word Starter  tra cui l'impossibilità di aprire file di tipo accde http://office.microsoft.com/en-us/starter-help/word-features-that-are-not-fully-supported-in-word-starter-HA010374498.aspx

    La risposta è stata utile?

    0 commenti Nessun commento