Como automatizar o Word com o Visual Basic para criar uma Caixa de Correio em Primeiro Lugar

Resumo

Este artigo aborda como automatizar o Word para criar uma mensagem de correio para uma origem de dados externa. Este artigo explica também as diferenças de código entre aceder aos dados com OLEDB, ODBC e DDE (Dynamic Data Exchange).

Mais Informações

Métodos de acesso a dados

Para configurar programaticamente uma origem de dados para um documento de correio em conjunto do Word, primeiro tem de chamar 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]) 

Nota

Para uma descrição completa de cada argumento, consulte a Ajuda online do Microsoft Word Visual Basic. De interesse principal na ligação a uma origem de dados externa estão os argumentos Nome, Ligação e Subtipo. As diferentes combinações destes três argumentos representam diferentes métodos de acesso a dados para a mesma.

Utilizar OLEDB

OLEDB é o método recomendado de acesso a dados. Para especificar OLEDB como o método de acesso a dados com o OpenDataSource, forneça o argumento Nome com o caminho e o nome do ficheiro para a base de dados ou para uma Ligação do Office DataSource (.odc). Se fornecer uma base de dados para o argumento Nome, o Word utilizará automaticamente o OLEDB se tiver instalado um fornecedor OLEDB que suporte o formato de base de dados.

Exemplos:

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

ou

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

O Word e outras aplicações do Office XP utilizam o Objeto ODSO (Office DataSource Object) para acesso OLEDB a origens de dados externas. O ODSO é o único mecanismo através do qual o Word pode aceder aos dados através do OLEDB para uma mensagem de e-mail. O ODSO requer que o argumento Nome para OpenDataSource seja um caminho completo para uma base de dados ou um caminho completo para um ficheiro ODC válido. O ODSO ignora todas as informações no argumento Ligação.

Utilizar o ODBC

Pode utilizar o ODBC para a sua interseção para aceder a dados para os quais o nome da origem de dados de utilizador (DSN) foi configurado no sistema. Para especificar o ODBC como o método de acesso a dados com o OpenDataSource, forneça uma cadeia vazia para o argumento Nome, uma cadeia de ligação ODBC para o argumento Ligação e wdMergeSubTypeWord2000 para o argumento SubType.

Exemplos:

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

Utilizar DDE

Pode utilizar o DDE para aceder a dados em bases de dados do Microsoft Access ou em livros do Microsoft Excel. Para especificar DDE como o método de acesso a dados com o OpenDataSource, forneça o caminho e o nome do ficheiro para a base de dados ou livro para o argumento Nome e wdMergeSubTypeWord2000 para o argumento SubType.

Exemplos:

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

Exemplo de automatização

O seguinte código de exemplo cria e executa uma postal para cartas de formulário utilizando OLEDB (através do ODSO). A origem de dados utilizada é a base de dados de exemplo do Access Northwind.mdb. Se a Northwind não estiver instalada, inicie o Microsoft Access 2002 ou o Microsoft Office Access 2003. No menu Ajuda , clique em Bases de Dados de Exemplo e, em seguida, selecionar Base de Dados de Exemplo da Northwind para instalar esta funcionalidade.

Para executar este exemplo, siga estes passos:

  1. Inicia um novo projeto EXE Padrão no Visual Basic. Por predefinição, é criado o Formulário1.

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

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

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

  4. Adicionar um controlo BotãoDe Comando ao Formulário1.

  5. Adicione o seguinte código ao módulo de código do Formulário1.

    Nota Se for necessário, modifique o caminho para Northwind.mdb para corresponder à sua 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. Prima F5 para executar o programa.

  7. Clique no controlo BotãoDe Comando no Formulário1 para efetuar a mesma.

Quando o código é concluído, o Word fica visível com um novo documento aberto. O novo documento contém cartas de formulário que resultam de uma mensagem de e-mail com dados extraídos da tabela Clientes na 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 efetuar uma Série de Correio do lado do cliente com XML a partir SQL Server