Cómo automatizar Word con Visual Basic para crear una combinación de correspondencia

Resumen

En este artículo se describe cómo automatizar Word para crear una combinación de correspondencia para un origen de datos externo. En este artículo también se explican las diferencias de código entre el acceso a los datos con OLEDB, ODBC y el intercambio dinámico de datos (DDE).

Más información

Métodos de acceso a datos

Para configurar mediante programación un origen de datos para un documento de combinación de correspondencia de Word, primero llame al método OpenDataSource de un objeto MailMerge. La sintaxis del método OpenDataSource es la siguiente:

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

Nota:

Para obtener una descripción completa de cada argumento, consulte la Ayuda en línea de Microsoft Word Visual Basic. Los argumentos Name, Connection y SubType son de interés principal para conectarse a un origen de datos externo. Las distintas combinaciones de estos tres argumentos representan diferentes métodos de acceso a datos para la combinación de correspondencia.

Uso de OLEDB

OLEDB es el método de acceso a datos recomendado. Para especificar OLEDB como método de acceso a datos con OpenDataSource, proporcione el argumento Name con la ruta de acceso y el nombre de archivo a la base de datos o a una conexión de Office DataSource (.odc). Si proporciona una base de datos para el argumento Name, Word usará automáticamente OLEDB si hay un proveedor OLEDB instalado que admita el formato de base de datos.

Ejemplo

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

o

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

Word y otras aplicaciones de Office XP usan el objeto DataSource de Office (ODSO) para el acceso OLEDB a orígenes de datos externos. ODSO es el único mecanismo por el que Word puede acceder a los datos mediante OLEDB para una combinación de correspondencia. ODSO requiere que el argumento Name de OpenDataSource sea una ruta de acceso completa a una base de datos o una ruta de acceso completa a un archivo ODC válido. ODSO omite cualquier información del argumento Connection.

Uso de ODBC

Puede usar ODBC para la combinación de correspondencia para acceder a los datos para los que se ha configurado un nombre de origen de datos de usuario (DSN) en el sistema. Para especificar ODBC como método de acceso a datos con OpenDataSource, proporcione una cadena vacía para el argumento Name, una cadena de conexión ODBC para el argumento Connection y wdMergeSubTypeWord2000 para el argumento SubType.

Ejemplo

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

Uso de DDE

Puede usar DDE para acceder a datos de bases de datos de Microsoft Access o libros de Microsoft Excel. Para especificar DDE como método de acceso a datos con OpenDataSource, proporcione la ruta de acceso y el nombre de archivo a la base de datos o al libro para el argumento Name y wdMergeSubTypeWord2000 para el argumento SubType.

Ejemplo

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

Ejemplo de automatización

El código de ejemplo siguiente crea y ejecuta una combinación de correspondencia para las letras de formulario mediante OLEDB (por medio de ODSO). El origen de datos que se usa es la base de datos de Access de ejemplo Northwind.mdb. Si Northwind no está instalado, inicie Microsoft Access 2002 o Microsoft Office Access 2003. En el menú Ayuda , haga clic en Bases de datos de ejemplo y, a continuación, elija Base de datos de ejemplo northwind para instalar esta característica.

Para ejecutar este ejemplo, siga estos pasos:

  1. Inicie un nuevo proyecto EXE estándar en Visual Basic. De forma predeterminada, se crea Form1.

  2. En el menú Proyecto , haga clic en Referencias.

  3. Haga clic en Biblioteca de objetos de Microsoft Word 2000 en la lista de referencias y, a continuación, haga clic en Aceptar.

    Nota Para usar el objeto de Microsoft Office Word 2003, agregue la biblioteca de objetos de Microsoft Word 11.0 en la lista de referencias y haga clic en Aceptar.

  4. Agregue un control CommandButton a Form1.

  5. Agregue el código siguiente al módulo de código de Form1.

    Nota Si es necesario, modifique la ruta de acceso a Northwind.mdb para que coincida con la instalación de 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. Presione F5 para ejecutar el programa.

  7. Haga clic en el control CommandButton de Form1 para realizar la combinación de correspondencia.

Cuando se completa el código, Word se hace visible con un nuevo documento abierto. El nuevo documento contiene letras de formulario resultantes de una combinación de correspondencia que contiene datos extraídos de la tabla Customers de Northwind.mdb.

Referencias

Para obtener más información, consulte el artículo en Microsoft Knowledge Base:

285176 Automatización de Word para realizar una combinación de correspondencia del lado cliente mediante XML desde SQL Server