Condividi tramite

Generare da stampa unione più documenti pdf con nome file = campo di stampa unione

Anonimo
2015-04-20T16:07:27+00:00

Buonasera,

ho creato attraverso la funzione di stampa unione di word, un documento contenente circa 1000 pagine.

L'obiettivo che mi pongo è quello di ricavare da ciascuna pagina di questo documento un file pdf che abbia il nome corrispondente ad un campo di stampa unione.

Mi spiego.

Ho un foglio excel contenente i seguenti campi:

  • nome
  • cognome
  • codice identificativo

Creo un documento word con la stampa unione. Ora ho un file che chiamerò "prova" che contiene 1000 pagine.

Ora, attraverso un'istruzione di Visual Basic vorrei creare 1000 file pdf che abbiano come nome file il codice identificativo.

Spero di essermi spiegato bene

grazie

Microsoft 365 e Office | Word | 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
  1. Anonimo
    2015-04-20T18:31:54+00:00

    Ciao MarcoWin8,

    ecco, appunto. Io invece avevo scritto:

    in un modulo visual basic del progetto vba del documento di stampa unioneincolla la seguente macro:

    Quindi non nel documento risultato della stampa unione ma proprio nel documento di stampa unione. Anche perché i campi di stampa unione sono su quello e a noi i campi servono per sapere come dare il nome ai file.

    Invece il documento unito non ha più le informazioni che ci servono. È un documento qualsiasi.

    20+ persone hanno trovato utile questa risposta.
    0 commenti Nessun commento

14 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-04-20T16:42:37+00:00

    Ciao MarcoWin8,

    in un modulo visual basic del progetto vba del documento di stampa unioneincolla la seguente macro:

    Public Sub Test2()

    On Error GoTo ErrH

    ' --- PERSONALIZZARE ---------- >

    ' Percorso di salvataggio dei file PDF:

    Const cstrPath  As String = "D:\Percorso\PDF"

    ' Nome del Campo di stampa unione che dà il nome

    ' ai file pdf:

    Const cstrField As String = "Codice_identificativo"

    ' ----------------------------- <

    Dim objWdMailMerge  As Word.MailMerge

    Dim lngRecNum       As Long

    Dim strPath         As String

    Dim strFilename     As String

        Application.ScreenUpdating = False

        Set objWdMailMerge = ThisDocument.MailMerge

        With objWdMailMerge

          .Destination = wdSendToNewDocument

          With .DataSource

            .ActiveRecord = wdLastRecord

            lngRecNum = .ActiveRecord

            .ActiveRecord = wdFirstRecord

            Do

              .FirstRecord = .ActiveRecord

              .LastRecord = .ActiveRecord

              strFilename = .DataFields(cstrField).Value

              If Len(strFilename) Then

                strFilename = cstrPath & strFilename

                objWdMailMerge.Execute

                With ActiveDocument

                  .SaveAs strFilename, wdFormatPDF, AddToRecentFiles:=False

                  .Saved = True

                  .Close

                End With

              End If

              If .ActiveRecord = lngRecNum Then Exit Do

              .ActiveRecord = wdNextRecord

            Loop

          End With

        End With

    ExitProc:

        Application.ScreenUpdating = True

        Set objWdMailMerge = Nothing

        Exit Sub

    ErrH:

        MsgBox Err.Description

        Resume ExitProc

    End Sub

    20+ persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2015-04-20T19:02:02+00:00

    Ciao MarcoWin8,

    evviva! :-)

    Grazie di essere tornato a riferire. Ora, se vuoi, puoi segnare Risposta, così:

    come indicato qui:

    Porre una domanda o avviare una discussione FAQ

    5 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2016-04-14T16:50:18+00:00

    Ciao Maurizio,

    anche ho ho inserito il codice nella VBA ma dopo il debug ed esegui mi da paramentro non valido.

    Vorrei inoltre poter nominare i singoli pdf con almeno due campi.

    Riesci ad aiutarmi? Utilizzo office 2007.

    Questo è il codice che ho usato.

    Public Sub Test2()

    On Error GoTo ErrH

    ' --- PERSONALIZZARE ---------- >

    ' Percorso di salvataggio dei file PDF:

    Const cstrPath  As String = "C:\Users\Utente\Dropbox\FAREMUTUA\GESTIONE E STRUMENTI\COOP SOCIALI\2016\DOCS ADESIONE\2016"

    ' Nome del Campo di stampa unione che dà il nome

    ' ai file pdf:

    Const cstrField As String = "COGNOME"

    ' ----------------------------- <

    Dim objWdMailMerge  As Word.MailMerge

    Dim lngRecNum       As Long

    Dim strPath         As String

    Dim strFilename     As String

        Application.ScreenUpdating = False

        Set objWdMailMerge = ThisDocument.MailMerge

        With objWdMailMerge

          .Destination = wdSendToNewDocument

          With .DataSource

            .ActiveRecord = wdLastRecord

            lngRecNum = .ActiveRecord

            .ActiveRecord = wdFirstRecord

            Do

              .FirstRecord = .ActiveRecord

              .LastRecord = .ActiveRecord

              strFilename = .DataFields(cstrField).Value

              If Len(strFilename) Then

                strFilename = cstrPath & strFilename

                objWdMailMerge.Execute

                With ActiveDocument

                  .SaveAs strFilename, wdFormatPDF, AddToRecentFiles:=False

                  .Saved = True

                  .Close

                End With

              End If

              If .ActiveRecord = lngRecNum Then Exit Do

              .ActiveRecord = wdNextRecord

            Loop

          End With

        End With

    ExitProc:

        Application.ScreenUpdating = True

        Set objWdMailMerge = Nothing

        Exit Sub

    ErrH:

        MsgBox Err.Description

        Resume ExitProc

    End Sub

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  4. Anonimo
    2015-05-14T14:25:19+00:00

    Buongiorno Maurizio, ho letto tutto l'argomento perché ho la stessa problematica da risolvere, nel momento in cui lancio la macro test2 Word (2013) mi dice che "il membro richiesto della raccolta non esiste". Da cosa potrebbe dipendere?

    il documento è di formato Doc di word con attivazione Macro

    questo è il codice inserito nel file, nel mio file Excel origine dati il campo di interesse si chiama Nome

    Public Sub Test2()

     On Error GoTo ErrH

    ' --- PERSONALIZZARE ---------- >

    ' Percorso di salvataggio dei file PDF:

    Const cstrPath  As String = "O:\Circolari Sito"

    ' Nome del Campo di stampa unione che dà il nome

    ' ai file pdf:

    Const cstrField As String = "Nome"

    ' ----------------------------- <

    Dim objWdMailMerge  As Word.MailMerge

     Dim lngRecNum       As Long

     Dim strPath         As String

     Dim strFilename     As String

         Application.ScreenUpdating = False

         Set objWdMailMerge = ThisDocument.MailMerge

         With objWdMailMerge

           .Destination = wdSendToNewDocument

           With .DataSource

             .ActiveRecord = wdLastRecord

             lngRecNum = .ActiveRecord

             .ActiveRecord = wdFirstRecord

             Do

               .FirstRecord = .ActiveRecord

               .LastRecord = .ActiveRecord

               strFilename = .DataFields(cstrField).Value

               If Len(strFilename) Then

                 strFilename = cstrPath & strFilename

                 objWdMailMerge.Execute

                 With ActiveDocument

                   .SaveAs strFilename, wdFormatPDF, AddToRecentFiles:=False

                   .Saved = True

                   .Close

                 End With

               End If

               If .ActiveRecord = lngRecNum Then Exit Do

               .ActiveRecord = wdNextRecord

             Loop

           End With

         End With

    ExitProc:

         Application.ScreenUpdating = True

         Set objWdMailMerge = Nothing

         Exit Sub

    ErrH:

         MsgBox Err.Description

         Resume ExitProc

     End Sub

    grazie mille, Andrea

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento