Como automatizar o Word com o Visual Basic para criar uma Mala Direta

Resumo

Este artigo discute como automatizar o Word para criar uma mala direta para uma fonte de dados externa. Este artigo também explica as diferenças de código entre o acesso aos dados com OLEDB, ODBC e DDE (troca dinâmica de dados).

Informações adicionais

Métodos de acesso a dados

Para configurar programaticamente uma fonte de dados para um documento de mala direta do Word, primeiro chame o método OpenDataSource de um objeto MailMerge. A sintaxe do método OpenDataSource é a seguinte:

<MailMergeObject>.OpenDataSource(Name, [Format], [ConfirmConversions], [ReadOnly], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [Revert],[WritePasswordDocument], [WritePasswordTemplate], [Connection], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType]) 

Observação

Para obter uma descrição completa de cada argumento, consulte a Ajuda online do Microsoft Word Visual Basic. O principal interesse para se conectar a uma fonte de dados externa são os argumentos Name, Connection e SubType. Combinações diferentes desses três argumentos representam diferentes métodos de acesso a dados para a mala direta.

Usando o OLEDB

O OLEDB é o método de acesso a dados recomendado. Para especificar o OLEDB como o método de acesso a dados com OpenDataSource, forneça o argumento Name com o caminho e o nome do arquivo para o banco de dados ou uma Conexão de Fonte de Dados do Office (.odc). Se você fornecer um banco de dados para o argumento Name, o Word usará automaticamente o OLEDB se houver um provedor OLEDB instalado que dê suporte ao formato de banco de dados.

Exemplo

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]"

ou

<MailMergeObject>.OpenDataSource Name:="C:\MyDataSource.odc", _
           SQLStatement:="SELECT * FROM [MyTable]"

O Word e outros aplicativos do Office XP usam o Objeto dataSource do Office (ODSO) para acesso OLEDB a fontes de dados externas. O ODSO é o único mecanismo pelo qual o Word pode acessar dados usando o OLEDB para uma mala direta. O ODSO requer que o argumento Name para OpenDataSource seja um caminho completo para um banco de dados ou um caminho completo para um arquivo ODC válido. O ODSO ignora todas as informações no argumento Connection.

Usando ODBC

Você pode usar o ODBC para sua mala direta para acessar dados para os quais um DSN (nome da fonte de dados do usuário) foi configurado no sistema. Para especificar o ODBC como o método de acesso a dados com OpenDataSource, forneça uma cadeia de caracteres vazia para o argumento Name, uma cadeia de conexão ODBC para o argumento Connection e wdMergeSubTypeWord2000 para o argumento SubType.

Exemplo

<MailMergeObject>.OpenDataSource Name:= "", _
     Connection:= "DSN=MySQLServerDSN;DATABASE=pubs;uid=sa;pwd=;", _
     SQLStatement:= "Select au_id, au_lname, au_fname from authors", _
     SubType:= wdMergeSubTypeWord2000

Usando DDE

Você pode usar o DDE para acessar dados em bancos de dados do Microsoft Access ou pastas de trabalho do Microsoft Excel. Para especificar a DDE como o método de acesso a dados com OpenDataSource, forneça o caminho e o nome do arquivo para o banco de dados ou a pasta de trabalho para o argumento Name e wdMergeSubTypeWord2000 para o argumento SubType.

Exemplo

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]", _
           SubType:=wdMergeSubTypeWord2000

Exemplo de automação

O código de exemplo a seguir cria e executa uma mala direta para letras de formulário usando o OLEDB (por meio do ODSO). A fonte de dados usada é o banco de dados northwind.mdb de exemplo do Access. Se a Northwind não estiver instalada, inicie o Microsoft Access 2002 ou o Microsoft Office Access 2003. No menu Ajuda , clique em Bancos de Dados de Exemplo e escolha Banco de Dados de Exemplo northwind para instalar esse recurso.

Para executar este exemplo, siga estas etapas:

  1. Inicie um novo projeto EXE Standard no Visual Basic. Por padrão, Form1 é criado.

  2. No menu Projeto , clique em Referências.

  3. Clique na Biblioteca de Objetos do Microsoft Word 2000 na lista de referências e clique em OK.

    Nota Para usar o Objeto do Microsoft Office Word 2003, adicione a Biblioteca de Objetos do Microsoft Word 11.0 na lista de referências e clique em OK.

  4. Adicione um controle CommandButton ao Form1.

  5. Adicione o código a seguir ao módulo de código para Form1.

    Nota Se for necessário, modifique o caminho para Northwind.mdb para corresponder à instalação do Office XP.

    Dim WithEvents oApp As Word.Application
    
    Private Sub Form_Load()
        'Start Word.
        Set oApp = CreateObject("Word.Application")
    End Sub
    
    Private Sub Command1_Click()
    
    Dim oMainDoc As Word.Document
        Dim oSel As Word.Selection
        Dim sDBPath as String
    
    'Start a new main document for the mail merge.
        Set oMainDoc = oApp.Documents.Add
    
    With oMainDoc.MailMerge
    
    .MainDocumentType = wdFormLetters
    
    'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
            .OpenDataSource Name:=sDBPath, _
               SQLStatement:="SELECT * FROM [Customers]"
    
    'Add the field codes to the document to create the form letter.
            With .Fields
                Set oSel = oApp.Selection
                .Add oSel.Range, "CompanyName"
                oSel.TypeParagraph
                .Add oSel.Range, "Address"
                oSel.TypeParagraph
                .Add oSel.Range, "City"
                oSel.TypeText ", "
                .Add oSel.Range, "Country"
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Dear "
                .Add oSel.Range, "ContactName"
                oSel.TypeText ","
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText " This letter is to inform you..."
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Sincerely, [Your Name Here]"
            End With
        End With
    
    'Perform the mail merge to a new document.
        With oMainDoc
            .MailMerge.Destination = wdSendToNewDocument
            .MailMerge.Execute Pause:=False
        End With
    
    End Sub
    
    Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
    
    'When the mail merge is complete, 1) make Word visible,
        '2) close the mail merge document leaving only the resulting document
        'open and 3) display a message.
        Doc.Close False
        oApp.Visible = True
        MsgBox "Mail Merge Complete: " & oApp.ActiveDocument.Name
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set oApp = Nothing
    End Sub
    
  6. Pressione F5 para executar o programa.

  7. Clique no controle CommandButton no Form1 para executar a mala direta.

Quando o código é concluído, o Word fica visível com um novo documento aberto. O novo documento contém letras de formulário resultantes de uma mala direta contendo dados extraídos da tabela Customers em Northwind.mdb.

Referências

Para obter mais informações, veja o artigo na Base de Dados de Conhecimento Microsoft:

285176 como automatizar o Word para executar uma Mala Direta do lado do cliente usando XML do SQL Server