Come automatizzare Word da Visual Basic per creare una stampa unione per le etichette di posta elettronica

Riepilogo

Questo articolo descrive come automatizzare Microsoft Office Word da un'applicazione Microsoft Visual Basic per creare ed eseguire una stampa unione per le etichette di posta elettronica.

Ulteriori informazioni

Il codice di esempio in questo articolo usa un file di testo delimitato da tabulazioni per l'origine dati. Il file di testo include i campi seguenti:

  • Contact_Name
  • Indirizzo
  • Città
  • Postal_code
  • Paese

È possibile usare qualsiasi editor di testo per creare l'origine dati del file di testo. Ad esempio, è possibile usare blocco note.

Quando si crea l'origine dati, ricordarsi di separare i campi (colonne) usando un carattere di tabulatore e di separare i record (righe) usando un ritorno a capo. Di seguito è riportato un esempio di come potrebbe essere visualizzato il file di testo:

Contact_NameAddress City Postal_Code Country
Maria AndersObere Str. 57 Berlin 12209 Germany 
Thomas Hardy120 Hanover Sq. London WA1 1DP UK
Hanna MoosForsterstr. 57 Mannheim 68306 Germany
Laurence Lebihan 12, rue des Bouchers Marseille 13008 France

Nota

È possibile usare qualsiasi altra origine dati anziché il file di testo delimitato da tabulazioni. Ad esempio, è possibile usare un database di Microsoft Access.

Esempio dettagliato

  1. Avviare un nuovo progetto EXE Standard in Visual Basic. Per impostazione predefinita, viene creato un modulo denominato Form1.
  2. Aggiungere un controllo CommandButton a Form1.
  3. Selezionare la libreria di oggetti di Microsoft Word per la versione di Word che si intende automatizzare e quindi fare clic su OK.
  4. Copiare il codice seguente nella finestra del codice di Form1.
    Private Sub Command1_Click()
    
    Dim oApp As Word.Application
        Dim oDoc As Word.Document
    
    'Start a new document in Word
        Set oApp = CreateObject("Word.Application")
        Set oDoc = oApp.Documents.Add
    
    With oDoc.MailMerge
    
    'Insert the mail merge fields temporarily so that
            'you can use the range that contains the merge fields as a layout
            'for your labels -- to use this as a layout, you can add it
            'as an AutoText entry.
            With .Fields
                .Add oApp.Selection.Range, "Contact_Name"
                oApp.Selection.TypeParagraph
                .Add oApp.Selection.Range, "Address"
                oApp.Selection.TypeParagraph
                .Add oApp.Selection.Range, "City"
                oApp.Selection.TypeText "  "
                .Add oApp.Selection.Range, "Postal_Code"
                oApp.Selection.TypeText " -- "
                .Add oApp.Selection.Range, "Country"
            End With
            Dim oAutoText As Word.AutoTextEntry
            Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add("MyLabelLayout", oDoc.Content)
            oDoc.Content.Delete 'Merge fields in document no longer needed now
                                'that the AutoText entry for the label layout
                                'has been added so delete it.
    
    'Set up the mail merge type as mailing labels and use
            'a tab-delimited text file as the data source.
            .MainDocumentType = wdMailingLabels 
            .OpenDataSource Name:="C:\data.txt" 'Specify the data source here
    
    'Create the new document for the labels using the AutoText entry
            'you added -- 5160 is the label number to use for this sample.
            'You can specify the label number you want to use for the output
            'in the Name argument.
            oApp.MailingLabel.CreateNewDocument Name:="5160", Address:="", _
                AutoText:="MyLabelLayout", LaserTray:=wdPrinterManualFeed
    
    'Execute the mail merge to generate the labels.
            .Destination = wdSendToNewDocument
            .Execute
    
    'Delete the AutoText entry you added
            oAutoText.Delete
    
    End With
    
    'Close the original document and make Word visible so that
    
    'the mail merge results are displayed
        oDoc.Close False
        oApp.Visible = True
    
    'Prevent save to Normal template when user exits Word
        oApp.NormalTemplate.Saved = True
    
    End Sub
    
    
    L'argomento Name per il metodo OpenDataSource in questo codice fa riferimento all'origine dati come c:\data.txt. Se l'origine dati ha un percorso diverso o un nome di file diverso, modificare di conseguenza questa riga nel codice.
  5. Premere F5 per eseguire il programma e quindi fare clic su Comando1. Un documento dell'etichetta di posta viene creato usando i dati ricavati dall'origine dati.

Riferimenti

Per altre informazioni su come automatizzare Word o su come creare documenti di stampa unione, fare clic sui numeri degli articoli seguenti per visualizzare gli articoli della Microsoft Knowledge Base:

220911 Come automatizzare Microsoft Word per eseguire una stampa unione tramite Visual C++ e MFC

212034 Come creare etichette di distribuzione tramite stampa unione in Word