如何使用 Visual Basic 自动执行 Microsoft Word 创建新文档

摘要

本分步文章介绍如何使用 Visual Basic 中的自动化在 Word 中创建新文档。

示例代码

本文中的示例代码演示如何执行以下操作:

  • 插入包含文本和格式的段落。
  • 浏览和修改文档中的各种范围。
  • 插入表、设置表格式,并使用数据填充表。
  • 添加图表。

若要使用 Visual Basic 中的自动化创建新的 Word 文档,请执行以下步骤:

  1. 在 Visual Basic 中,创建新的标准 EXE 项目。 默认情况下会创建 Form1。

  2. “项目” 菜单上,单击“引用”,单击以下选项之一,然后单击 “确定”:

    • 对于 Office Word 2007,请单击 Microsoft Word 12.0 对象库
    • 对于 Word 2003,请单击 Microsoft Word 11.0 对象库
    • 对于 Word 2002,请单击 Microsoft Word 10.0 对象库
    • 对于 Word 2000,请单击 Microsoft Word 9.0 对象库
  3. 将 CommandButton 控件添加到 Form1。

  4. 将以下代码添加到 Command1 的 Click 事件:

     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. 按 F5 运行程序,然后单击 Command1。

代码完成后,检查为你创建的文档。 文档包含两页格式化段落、表格和图表。

使用模板

如果使用自动化来生成所有采用通用格式的文档,则可以从基于预格式化模板的新文档开始此过程中获益。 将模板与 Word 自动化客户端配合使用,与从无到有地生成文档有两个重要优势:

  • 可以更好地控制整个文档中对象的格式设置和放置。
  • 可以使用更少的代码生成文档。

通过使用模板,可以微调表、段落和其他对象在文档中的位置,并包括这些对象的格式。 通过使用自动化,可以使用以下代码基于模板创建新文档:

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

在模板中,可以定义书签,以便自动化客户端可以在文档的特定位置填写变量文本,如下所示:

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

使用模板的另一个优点是可以创建和存储要在运行时应用的格式样式,如下所示:

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

oWord.Selection.Style = "MyStyle"

参考

有关其他信息,请单击以下文章编号,查看 Microsoft 知识库中的文章:

285332 如何使用 Visual Basic 自动执行 Word 2002 以创建邮件合并

使用 Visual Studio 进行 Microsoft Office 开发

(c) Microsoft Corporation 2001,保留所有权利。 由 Microsoft Corporation Lori B. Turner 贡献。