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

Resumen

En este artículo se explica cómo automatizar Word para crear una combinación de correspondencia de un origen de datos externo. Este artículo también explica las diferencias del código de 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 a un origen de datos para un documento de combinación de correspondencia de Word, llamar primero al método OpenDataSource de un objeto MailMerge . La sintaxis del método OpenDataSource es como sigue:
< MailMergeObject >. OpenDataSource (Nombre, [formato], [ConfirmConversions], [sólo lectura], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [volver], [WritePasswordDocument], [WritePasswordTemplate], [conexión], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType])
Nota: Para obtener una descripción completa de cada argumento, consulte la Ayuda en pantalla de Visual Basic de Microsoft Word. Son los argumentos nombre, conexióny subtipo de interés principal para conectarse a un origen de datos externo. Diferentes combinaciones de estos tres argumentos representan datos diferentes métodos de acceso para combinar correspondencia.

Utilizando OLEDB

OLEDB es el método de acceso de datos recomendado. Para especificar el método de acceso a datos con OpenDataSourceOLEDB, proporcione el argumento de nombre con la ruta de acceso y el nombre del archivo a la base de datos o una conexión de origen de datos de Office (.odc). Si proporciona una base de datos para el argumento Name , Word utilizará automáticamente OLEDB si hay instalado un proveedor OLEDB 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 utilizan el objeto de origen de datos de Office (ODSO) para el acceso OLEDB a orígenes de datos externos. ODSO es el único mecanismo por el que Word puede tener acceso a datos utilizando OLEDB para combinar correspondencia. ODSO requiere que el
El argumento nombre de OpenDataSource ser una ruta de acceso completa de una base de datos o una ruta de acceso completa a un archivo ODC válido. ODSO omite cualquier información en el argumento Connection .

Con ODBC

Puede utilizar ODBC para tener acceso a los datos para el que se configuró un nombre de origen de datos (DSN) de usuario en el sistema de correspondencia. Para especificar ODBC como el método de acceso a datos con OpenDataSource, suministre una cadena vacía para el argumento Name , una cadena de conexión ODBC para el argumento Connection y wdMergeSubTypeWord2000 para el argumento de subtipo .

Ejemplo
<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

Puede utilizar DDE para acceso a datos en bases de datos de Microsoft Access o libros de Microsoft Excel. Para especificar el método de acceso a datos con OpenDataSourceDDE, proporcione la ruta de acceso y el nombre del archivo a la base de datos o el libro para el argumento Name y wdMergeSubTypeWord2000 para el argumento de subtipo .

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

Ejemplo de automatización

El código de ejemplo siguiente se crea y ejecuta una combinación de correspondencia para cartas modelo utilizando OLE DB (mediante ODSO). El origen de datos que se utiliza es la base de datos de Access de ejemplo Neptuno.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 ejemploy, a continuación, elija la base de datos Neptuno 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 utilizar el objeto de Microsoft Office Word 2003, agregue la biblioteca de objetos de Microsoft Word 11.0 en la lista de referencias y, a continuación, haga clic en
    OK.
  4. Agregue un control CommandButton a Form1.
  5. Agregue el código siguiente al módulo de código para Form1.

    Nota: Si es necesario, modifique la ruta de acceso a Neptuno.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 en Form1 para realizar la combinación.
Cuando el código termine, Word se hace visible con un nuevo documento abierto. El nuevo documento contiene cartas modelo que resultan de una combinación de correo que contiene los datos que se extraen de la tabla Customers de Neptuno.mdb.

Referencias

Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

Indicador de 289830 para seleccionar la tabla con el código de combinación de correspondencia de Word 2002 para origen de datos Excel o Access

279462 animados para seleccionar un origen de datos al automatizar la correspondencia de Word 2002

Demostración de código de evento de combinación de correspondencia de Word 2002 285333

285176 cómo automatizar Word para que realice una combinación de correo de cliente mediante XML de SQL Server

220607 cómo automatizar Microsoft Word para realizar la combinación de correspondencia desde Visual Basic

Propiedades

Id. de artículo: 285332 - Última revisión: 24 ene. 2017 - Revisión: 1

Comentarios