Automatización de Microsoft Word mediante Visual Basic para crear un documento

Resumen

En este artículo paso a paso se describe cómo crear un nuevo documento en Word mediante Automation desde Visual Basic.

Código de ejemplo

En el código de ejemplo de este artículo se muestra cómo hacer lo siguiente:

  • Inserte párrafos con texto y formato.
  • Examine y modifique varios intervalos dentro de un documento.
  • Inserte tablas, dé formato a las tablas y rellene las tablas con datos.
  • Agregue un gráfico.

Para crear un documento de Word con Automation desde Visual Basic, siga estos pasos:

  1. En Visual Basic, cree un nuevo proyecto EXE estándar. Form1 se crea de forma predeterminada.

  2. En el menú Proyecto , haga clic enReferencias, haga clic en una de las opciones siguientes y, a continuación, haga clic en Aceptar:

    • Para Office Word 2007, haga clic en Biblioteca de objetos de Microsoft Word 12.0.
    • En Word 2003, haga clic en Biblioteca de objetos de Microsoft Word 11.0.
    • En Word 2002, haga clic en Biblioteca de objetos de Microsoft Word 10.0.
    • Para Word 2000, haga clic en Biblioteca de objetos de Microsoft Word 9.0.
  3. Agregue un control CommandButton a Form1.

  4. Agregue el código siguiente al evento Click para Command1:

     Dim oWord As Word.Application
     Dim oDoc As Word.Document
     Dim oTable As Word.Table
     Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph
     Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph
     Dim oRng As Word.Range
     Dim oShape As Word.InlineShape
     Dim oChart As Object
     Dim Pos as Double
    
     'Start Word and open the document template.
     Set oWord = CreateObject("Word.Application")
     oWord.Visible = True
     Set oDoc = oWord.Documents.Add
    
     'Insert a paragraph at the beginning of the document.
     Set oPara1 = oDoc.Content.Paragraphs.Add
     oPara1.Range.Text = "Heading 1"
     oPara1.Range.Font.Bold = True
     oPara1.Format.SpaceAfter = 24    '24 pt spacing after paragraph.
     oPara1.Range.InsertParagraphAfter
    
     'Insert a paragraph at the end of the document.
     '** \endofdoc is a predefined bookmark.
     Set oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)
     oPara2.Range.Text = "Heading 2"
     oPara2.Format.SpaceAfter = 6
     oPara2.Range.InsertParagraphAfter
    
     'Insert another paragraph.
     Set oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)
     oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:"
     oPara3.Range.Font.Bold = False
     oPara3.Format.SpaceAfter = 24
     oPara3.Range.InsertParagraphAfter
    
     'Insert a 3 x 5 table, fill it with data and make the first row
     'bold,italic.
     Dim r As Integer, c As Integer
     Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 3, 5)
     oTable.Range.ParagraphFormat.SpaceAfter = 6
     For r = 1 To 3
         For c = 1 To 5
             oTable.Cell(r, c).Range.Text = "r" & r & "c" & c
         Next
     Next
     oTable.Rows(1).Range.Font.Bold = True
     oTable.Rows(1).Range.Font.Italic = True
    
     'Add some text after the table.
     'oTable.Range.InsertParagraphAfter
     Set oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)
     oPara4.Range.InsertParagraphBefore
     oPara4.Range.Text = "And here's another table:"
     oPara4.Format.SpaceAfter = 24
     oPara4.Range.InsertParagraphAfter
    
     'Insert a 5 x 2 table, fill it with data and change the column widths.
     Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 5, 2)
     oTable.Range.ParagraphFormat.SpaceAfter = 6
     For r = 1 To 5
         For c = 1 To 2
             oTable.Cell(r, c).Range.Text = "r" & r & "c" & c
         Next
     Next
     oTable.Columns(1).Width = oWord.InchesToPoints(2)   'Change width of columns 1 & 2.
     oTable.Columns(2).Width = oWord.InchesToPoints(3)
    
     'Keep inserting text. When you get to 7 inches from top of the
     'document, insert a hard page break.
     Pos = oWord.InchesToPoints(7)
     oDoc.Bookmarks("\endofdoc").Range.InsertParagraphAfter
     Do
         Set oRng = oDoc.Bookmarks("\endofdoc").Range
         oRng.ParagraphFormat.SpaceAfter = 6
         oRng.InsertAfter "A line of text"
         oRng.InsertParagraphAfter
     Loop While Pos >= oRng.Information(wdVerticalPositionRelativeToPage)
     oRng.Collapse (wdCollapseEnd)
     oRng.InsertBreak wdPageBreak
     oRng.Collapse wdCollapseEnd
     oRng.InsertAfter "We're now on page 2. Here's my chart:"
     oRng.InsertParagraphAfter
    
     'Insert a chart and change the chart.
     Set oShape = oDoc.Bookmarks("\endofdoc").Range.InlineShapes.AddOLEObject( _
         ClassType:="MSGraph.Chart.8", FileName _
         :="", LinkToFile:=False, DisplayAsIcon:=False)
     Set oChart = oShape.OLEFormat.Object
     oChart.charttype = 4 'xlLine = 4
     oChart.Application.Update
     oChart.Application.Quit
     '... If desired, you can proceed from here using the Microsoft Graph 
     'Object model on the oChart object to make additional changes to the
     'chart.
     oShape.Width = oWord.InchesToPoints(6.25)
     oShape.Height = oWord.InchesToPoints(3.57)
    
     'Add text after the chart.
     Set oRng = oDoc.Bookmarks("\endofdoc").Range
     oRng.InsertParagraphAfter
     oRng.InsertAfter "THE END."
    
     'All done. Unload this form.
     Unload Me
    
    
  5. Presione F5 para ejecutar el programa y, a continuación, haga clic en Comando1.

Una vez completado el código, examine el documento que se creó automáticamente. El documento contiene dos páginas de párrafos con formato, tablas y un gráfico.

Uso de una plantilla

Si usa Automation para compilar documentos que están todos en un formato común, puede beneficiarse de iniciar el proceso con un nuevo documento basado en una plantilla con formato previo. El uso de una plantilla con el cliente de Word Automation tiene dos ventajas significativas sobre la creación de un documento a partir de la nada:

  • Puede tener un mayor control sobre el formato y la ubicación de los objetos en los documentos.
  • Puede compilar los documentos con menos código.

Mediante el uso de una plantilla, puede ajustar la ubicación de tablas, párrafos y otros objetos dentro del documento, así como incluir el formato en esos objetos. Con Automation, puede crear un nuevo documento basado en la plantilla con código como el siguiente:

oWord.Documents.Add "<Path to your template>\MyTemplate.dot"

En la plantilla, puede definir marcadores para que el cliente de Automation pueda rellenar texto variable en una ubicación específica del documento, como se indica a continuación:

oDoc.Bookmarks("MyBookmark").Range.Text = "Some Text Here"

Otra ventaja de usar una plantilla es que puede crear y almacenar estilos de formato que desea aplicar en tiempo de ejecución, como se indica a continuación:

oDoc.Bookmarks("MyBookmark").Range.Style = "MyStyle"

o

oWord.Selection.Style = "MyStyle"

Referencias

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

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

Desarrollo de Microsoft Office con Visual Studio

(c) Microsoft Corporation 2001, Todos los derechos reservados. Contribuciones de Lori B. Turner, Microsoft Corporation.