En este artículo se muestra cómo utilizar Microsoft Word para crear un documento de combinación de correspondencia utilizando automatización desde Visual Basic.
Hay dos formas de controlar un servidor de automatización: mediante el enlace en tiempo de ejecución o mediante el enlace anticipado. Con enlace en tiempo de ejecución, los métodos no están enlazados hasta el tiempo de ejecución y el servidor de automatización se declara como Object. Con el enlace anticipado, la aplicación conoce en tiempo de diseño el tipo exacto del objeto que se comunicarán con y puede declarar sus objetos como un tipo específico. Este ejemplo utiliza enlace anticipado, que se considera mejor en la mayoría de los casos, ya que ofrece mayor rendimiento y una mejor seguridad de tipos.
Para anticipado enlazar a un servidor de automatización, tiene que establecer una referencia a la biblioteca de tipo de ese servidor. En Visual Basic, esto se realiza mediante el cuadro de diálogo referencias . Para abrir el cuadro de diálogo referencias , haga clic en referencias en el menú proyecto . En este ejemplo, se debe agregar una referencia a la biblioteca de tipo para que Word antes de poder ejecutar el código.
Generar el ejemplo de Automatización
Inicie Visual Basic y cree un nuevo proyecto EXE estándar. Se creará Form1 de manera predeterminada.
Agregue un control CommandButton a Form1.
En el menú proyecto , haga clic en referencias para abrir el cuadro de diálogo referencias .
Seleccione Microsoft Word 11.0 Object Library para crear una referencia a la biblioteca de tipo Microsoft Office Word 2003. Para Word 2002, seleccione objeto de Microsoft Word 10.0 biblioteca . Para Word 2000, seleccione objeto de Microsoft Word 9.0 biblioteca . Para Word 97, seleccione Microsoft Word 8.0 Object Library .
Haga clic en Aceptar para cerrar el cuadro de diálogo referencias .
En la ventana de código de Form1, agregue el código siguiente:
Option Explicit
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Private Sub Command1_Click()
Dim wrdSelection As Word.Selection
Dim wrdMailMerge As Word.MailMerge
Dim wrdMergeFields As Word.MailMergeFields
Dim StrToAdd As String
' Create an instance of Word, and make it visible.
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
' Add a new document.
Set wrdDoc = wrdApp.Documents.Add
wrdDoc.Select
Set wrdSelection = wrdApp.Selection
Set wrdMailMerge = wrdDoc.MailMerge
' Create the MailMerge Data file.
CreateMailMergeDataFile
' Create a string, and insert it into the document.
StrToAdd = "State University" & vbCr & _
"Electrical Engineering Department"
wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphCenter
wrdSelection.TypeText StrToAdd
InsertLines 4
' Insert merge data.
wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Set wrdMergeFields = wrdMailMerge.Fields
wrdMergeFields.Add wrdSelection.Range, "FirstName"
wrdSelection.TypeText " "
wrdMergeFields.Add wrdSelection.Range, "LastName"
wrdSelection.TypeParagraph
wrdMergeFields.Add wrdSelection.Range, "Address"
wrdSelection.TypeParagraph
wrdMergeFields.Add wrdSelection.Range, "CityStateZip"
InsertLines 2
' Right align the line, and insert a date field
' with the current date.
wrdSelection.ParagraphFormat.Alignment = _
wdAlignParagraphRight
wrdSelection.InsertDateTime _
DateTimeFormat:="dddd, MMMM dd, yyyy", _
InsertAsField:=False
InsertLines 2
' Align the rest of the document.
wrdSelection.ParagraphFormat.Alignment = _
wdAlignParagraphJustify
wrdSelection.TypeText "Dear "
wrdMergeFields.Add wrdSelection.Range, "FirstName"
wrdSelection.TypeText ","
InsertLines 2
' Create a string, and insert it into the document.
StrToAdd = "Thank you for your recent request for next " & _
"semester's class schedule for the Electrical " & _
"Engineering Department. Enclosed with this " & _
"letter is a booklet containing all the classes " & _
"offered next semester at State University. " & _
"Several new classes will be offered in the " & _
"Electrical Engineering Department next semester. " & _
"These classes are listed below."
wrdSelection.TypeText StrToAdd
InsertLines 2
' Insert a new table with 9 rows and 4 columns.
wrdDoc.Tables.Add wrdSelection.Range, NumRows:=9, _
NumColumns:=4
With wrdDoc.Tables(1)
' Set the column widths
.Columns(1).SetWidth 51, wdAdjustNone
.Columns(2).SetWidth 170, wdAdjustNone
.Columns(3).SetWidth 100, wdAdjustNone
.Columns(4).SetWidth 111, wdAdjustNone
' Set the shading on the first row to light gray.
.Rows(1).Cells.Shading.BackgroundPatternColorIndex = _
wdGray25
' Format the first row in bold.
.Rows(1).Range.Bold = True
' Center the text in Cell (1,1).
.Cell(1, 1).Range.Paragraphs.Alignment = wdAlignParagraphCenter
' Fill each row of the table with data.
FillRow wrdDoc, 1, "Class Number", "Class Name", "Class Time", _
"Instructor"
FillRow wrdDoc, 2, "EE220", "Introduction to Electronics II", _
"1:00-2:00 M,W,F", "Dr. Jensen"
FillRow wrdDoc, 3, "EE230", "Electromagnetic Field Theory I", _
"10:00-11:30 T,T", "Dr. Crump"
FillRow wrdDoc, 4, "EE300", "Feedback Control Systems", _
"9:00-10:00 M,W,F", "Dr. Murdy"
FillRow wrdDoc, 5, "EE325", "Advanced Digital Design", _
"9:00-10:30 T,T", "Dr. Alley"
FillRow wrdDoc, 6, "EE350", "Advanced Communication Systems", _
"9:00-10:30 T,T", "Dr. Taylor"
FillRow wrdDoc, 7, "EE400", "Advanced Microwave Theory", _
"1:00-2:30 T,T", "Dr. Lee"
FillRow wrdDoc, 8, "EE450", "Plasma Theory", _
"1:00-2:00 M,W,F", "Dr. Davis"
FillRow wrdDoc, 9, "EE500", "Principles of VLSI Design", _
"3:00-4:00 M,W,F", "Dr. Ellison"
End With
' Go to the end of the document.
wrdApp.Selection.GoTo wdGoToLine, wdGoToLast
InsertLines 2
' Create a string, and insert it into the document.
StrToAdd = "For additional information regarding the " & _
"Department of Electrical Engineering, " & _
"you can visit our Web site at "
wrdSelection.TypeText StrToAdd
' Insert a hyperlink to the Web page.
wrdSelection.Hyperlinks.Add Anchor:=wrdSelection.Range, _
Address:="http://www.ee.stateu.tld"
' Create a string, and insert it into the document.
StrToAdd = ". Thank you for your interest in the classes " & _
"offered in the Department of Electrical " & _
"Engineering. If you have any other questions, " & _
"please feel free to give us a call at " & _
"555-1212." & vbCr & vbCr & _
"Sincerely," & vbCr & vbCr & _
"Kathryn M. Hinsch" & vbCr & _
"Department of Electrical Engineering" & vbCr
wrdSelection.TypeText StrToAdd
' Perform mail merge.
wrdMailMerge.Destination = wdSendToNewDocument
wrdMailMerge.Execute False
' Close the original form document.
wrdDoc.Saved = True
wrdDoc.Close False
' Notify user we are done.
MsgBox "Mail Merge Complete.", vbMsgBoxSetForeground
' Release references.
Set wrdSelection = Nothing
Set wrdMailMerge = Nothing
Set wrdMergeFields = Nothing
Set wrdDoc = Nothing
Set wrdApp = Nothing
' Clean up the temp file.
Kill "C:\DataDoc.doc"
End Sub
Public Sub InsertLines(LineNum As Integer)
Dim iCount As Integer
' Insert "LineNum" blank lines.
For iCount = 1 To LineNum
wrdApp.Selection.TypeParagraph
Next iCount
End Sub
Public Sub FillRow(Doc As Word.Document, Row As Integer, _
Text1 As String, Text2 As String, _
Text3 As String, Text4 As String)
With Doc.Tables(1)
' Insert the data into the specific cell.
.Cell(Row, 1).Range.InsertAfter Text1
.Cell(Row, 2).Range.InsertAfter Text2
.Cell(Row, 3).Range.InsertAfter Text3
.Cell(Row, 4).Range.InsertAfter Text4
End With
End Sub
Public Sub CreateMailMergeDataFile()
Dim wrdDataDoc As Word.Document
Dim iCount As Integer
' Create a data source at C:\DataDoc.doc that contains the field data.
wrdDoc.MailMerge.CreateDataSource Name:="C:\DataDoc.doc", _
HeaderRecord:="FirstName, LastName, Address, CityStateZip"
' Open the file to insert the data.
Set wrdDataDoc = wrdApp.Documents.Open("C:\DataDoc.doc")
For iCount = 1 To 2
wrdDataDoc.Tables(1).Rows.Add
Next iCount
' Fill in the data.
FillRow wrdDataDoc, 2, "Steve", "DeBroux", _
"4567 Main Street", "Buffalo, NY 98052"
FillRow wrdDataDoc, 3, "Jan", "Miksovsky", _
"1234 5th Street", "Charlotte, NC 98765"
FillRow wrdDataDoc, 4, "Brian", "Valentine", _
"12348 78th Street Apt. 214", "Lubbock, TX 25874"
' Save and close the file.
wrdDataDoc.Save
wrdDataDoc.Close False
End Sub
Presione la tecla F5 y haga clic en el botón para ejecutar el ejemplo.
Id. de artículo: 220607 - Última revisión: miércoles, 24 de enero de 2007 - Versión: 6.4
La información de este artículo se refiere a:
Microsoft Visual Basic 6.0 Edición de aprendizaje
Microsoft Visual Basic 5.0 Learning Edition
Microsoft Visual Basic 6.0 Professional Edition
Microsoft Visual Basic 5.0 Professional Edition
Microsoft Visual Basic Enterprise Edition for Windows 6.0
Microsoft Visual Basic 5.0 Enterprise Edition
Microsoft Office 2003, All Editions
Microsoft Office XP Developer Edition
Microsoft Office 2000 Developer Edition
Microsoft Office Word 2003
Microsoft Word 2002 Standard Edition
Microsoft Word 2000 Standard Edition
Microsoft Word 97 Standard Edition
Palabras clave:
kbmt kbautomation kbhowto KB220607 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 220607
¡Muchas gracias! Sus comentarios nos ayudarán a mejorar los contenidos de soporte. Para más opciones de asistencia, visite la página de Ayuda y soporte técnico.