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:
Inicie un nuevo proyecto EXE estándar en Visual Basic. De forma predeterminada, se crea Form1.
En el menú Proyecto , haga clic en Referencias.
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.
Agregue un control CommandButton a Form1.
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
Presione F5 para ejecutar el programa.
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