Como automatizar o Word a partir do Visual Basic para criar uma mensagem de correio para etiquetas de correio

Resumo

Este artigo descreve como automatizar o Microsoft Office Word a partir de uma aplicação do Microsoft Visual Basic para criar e executar uma mensagem de correio para etiquetas de correio.

Mais Informações

O código de exemplo neste artigo utiliza um ficheiro de texto delimitado por tabues para a origem de dados. O ficheiro de texto tem os seguintes campos:

  • Contact_Name
  • Morada
  • Localidade
  • Postal_Code
  • País

Pode utilizar qualquer editor de texto para criar a origem de dados de ficheiro de texto. Por exemplo, pode utilizar o Bloco de Notas.

Quando criar a origem de dados, lembre-se de separar os campos (colunas) utilizando um caráter de tabida e separar os registos (linhas) utilizando um retorno. Segue-se um exemplo de como o ficheiro de texto poderá ser apresentado:

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

Pode utilizar qualquer outra origem de dados em vez do ficheiro de texto delimitado por tabues. Por exemplo, pode utilizar uma base de dados do Microsoft Access.

Exemplo passo a passo

  1. Inicia um novo projeto EXE Padrão no Visual Basic. Por predefinição, é criado um formulário com o nome Formulário1.
  2. Adicionar um BotãoDe Comando ao Formulário1.
  3. Selecione a Biblioteca de Objetos do Microsoft Word da versão do Word que pretende automatizar e, em seguida, clique em OK.
  4. Copie o seguinte código para a janela código do Formulário1.
    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
    
    
    O argumento Nome do método OpenDataSource neste código referencia a origem de dados como c:\data.txt. Se a origem de dados tiver um caminho diferente ou um nome de ficheiro diferente, modifique esta linha no código em conformidade.
  5. Prima a tecla F5 para executar o programa e, em seguida, clique em Comando1. Um documento de etiqueta de correio é criado ao utilizar dados da origem de dados.

Referências

Para obter mais informações sobre como automatizar o Word ou sobre como criar documentos de série, clique nos seguintes números de artigo para ver os artigos na Base de Dados de Conhecimento Microsoft:

220911 Como automatizar o Microsoft Word para efetuar uma mensagem de correio através do Visual C++ e MFC

212034 Como criar etiquetas de correio com a Mensagem de Correio no Word