Word automatiseren vanuit Visual Basic om een samenvoegbewerking te maken voor adresetiketten

Samenvatting

In dit artikel wordt beschreven hoe u Microsoft Office Word automatiseert vanuit een Microsoft Visual Basic-toepassing voor het maken en uitvoeren van een samenvoegbewerking voor adresetiketten.

Meer informatie

De voorbeeldcode in dit artikel maakt gebruik van een tekstbestand met tabscheidingstekens voor de gegevensbron. Het tekstbestand heeft de volgende velden:

  • Contact_Name
  • Adres
  • Plaats
  • Postal_Code
  • Land

U kunt elke teksteditor gebruiken om de gegevensbron van het tekstbestand te maken. U kunt bijvoorbeeld Kladblok gebruiken.

Wanneer u de gegevensbron maakt, moet u de velden (kolommen) scheiden met behulp van een tabteken en de records (rijen) scheiden met behulp van een regelterugloop. Hier volgt een voorbeeld van hoe het tekstbestand kan worden weergegeven:

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

Opmerking

U kunt elke andere gegevensbron gebruiken in plaats van het tekstbestand met tabscheidingstekens. U kunt bijvoorbeeld een Microsoft Access-database gebruiken.

Stapsgewijze voorbeeld

  1. Start een nieuw Standard EXE-project in Visual Basic. Standaard wordt een formulier met de naam Form1 gemaakt.
  2. Voeg een CommandButton toe aan Form1.
  3. Selecteer de Microsoft Word-objectbibliotheek voor de versie van Word die u wilt automatiseren en klik op OK.
  4. Kopieer de volgende code naar het codevenster van 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
    
    
    Het argument Name voor de OpenDataSource-methode in deze code verwijst naar de gegevensbron als c:\data.txt. Als de gegevensbron een ander pad of een andere bestandsnaam heeft, wijzigt u deze regel in de code dienovereenkomstig.
  5. Druk op F5 om het programma uit te voeren en klik vervolgens op Command1. Een mailinglabeldocument wordt gemaakt met behulp van gegevens die uit de gegevensbron worden gehaald.

Verwijzingen

Voor meer informatie over het automatiseren van Word of over het maken van samenvoegdocumenten klikt u op de volgende artikelnummers om de artikelen in de Microsoft Knowledge Base weer te geven:

220911 Microsoft Word automatiseren om afdruk samenvoegen uit te voeren met Visual C++ en MFC

212034 Adresetiketten maken met Afdruk samenvoegen in Word