处理Word文档:Document对象

与文档有关的对象有Document对象和Documents对象。Document对象表示文档,Documents对象为集合,对所有Document对象进行存储和管理。[大谦Excel,dqexcel点com]

创建文档

使用Documents对象的Add方法创建新文档。

code.vba
Sub Test()
  Dim doc As Document
  Set doc = Documents.Add()
  Debug.Print ActiveDocument.Name
End Sub

下面新建文档时指定模板路径和名称给Template参数,则新建的文档使用该模板。

code.vba
Sub Test2()
  Dim doc As Document
  Set doc = Documents.Add(Template:="C:\Program Files(x86)\Microsoft Office\Templates\2052\StudentReport.dotx", Visible:=True)
End Sub

新建的Word文档如图2-1所示。

Document Image

图2-1 新建文档使用指定模板

打开和保存文档

使用Documents对象的Open方法打开已经存在的文档。下面的代码以只读方式打开D盘下的test.docx文件。

code.vba
Sub Test()
  Dim doc As Document
  Set doc = Documents.Open(FileName:="D:\test.docx", ReadOnly:=True)
  Debug.Print doc.Name
End Sub

保存文档时,根据文档的情况使用不同的方法进行操作。对于打开的已经保存过的文档,使用Document对象的Save方法进行保存;对于新建文档,使用Document对象的Save2方法进行保存。

保存文档时常常进行一个判断,当保存过的文档打开后,如果没有被修改,则不必进行保存;被修改过了,进行保存。使用Document对象的Saved属性,可以判断该文档打开后是否进行了修改。如果值为True,说明文档没有被修改,值为False时表示文档被修改了。于是有类似下面的编码方法。

code.vba
Sub Test()
  Dim doc As Document
  Set doc = Documents.Open("D:\mytest.docx")
  doc.Paragraphs(1).Range.Text = "这是修改后的文档"
  doc.Save
End Sub

对于新建的文档,保存时使用Document对象的SaveAs2方法。下面新建一个文档,使用Document对象的SaveAs2方法将它保存为Docx格式的文件。

code.vba
Sub Test2()
  Dim doc As Document
  Set doc = Documents.Add()
  doc.Paragraphs(1).Range.Text = "这是一个新的文档"
  doc.SaveAs2("D:\mytest.docx")
End Sub

将文档另存为PDF文件test.pdf。

code.vba
Sub Test3()
  Dim doc As Document
  Set doc = Documents.Add()
  doc.Paragraphs(1).Range.Text = "保存为PDF文档"
  doc.SaveAs2 FileName:="D:\mytestpdf.pdf", FileFormat:=wdFormatPDF
End Sub

将文档另存为文本文件test.txt。

code.vba
Sub Test4()
  Dim doc As Document
  Set doc = Documents.Add()
  doc.Paragraphs(1).Range.Text = "保存为TXT文档"
  doc.SaveAs2 FileName:="D:\mytesttxt.txt", FileFormat:=wdFormatText
End Sub

文档的引用

每一个新建的或新打开的文档,都会作为Document对象添加到Documents集合中,并且得到一个索引号。第1个添加进集合的索引号为1,第2个的为2,以此类推。当需要对集合中的某个文档进行处理时,可以利用这个索引号找到它,找到它这个操作称为引用。

下面两行代码分别新建一个文档和打开一个已有文件。这两个文档都会自动添加到Documents集合中。查看Documents集合中的文档个数。利用索引号查看集合中两个文档的文件名。

code.vba
Sub Test()
  '使用索引号进行引用
  Dim doc As Document
  Dim doc2 As Document
  Set doc = Documents.Add
  Set doc2 = Documents.Open("D:\test.docx")
  Debug.Print Documents.Count
  Debug.Print Documents(1).Name
End Sub

除了使用索引号引用文档,还可以使用文档的名称进行引用,例如:

code.vba
Sub Test2()
  '使用文档名称进行引用
  Dim doc As Document
  Dim doc2 As Document
  Set doc = Documents.Add
  Set doc2 = Documents.Open("D:\test.docx")
  Debug.Print Documents.Count
  Debug.Print Documents("test.docx").Name
End Sub

关闭文档

使用Document对象的Close方法关闭文档。下面关闭集合中的第1个文档。

code.vba
Sub Test4()
  '关闭文档
  Dim doc As Document
  Dim doc2 As Document
  Set doc = Documents.Add
  Set doc2 = Documents.Open("D:\test.docx")
  doc.Close
End Sub

文档对象的主要属性和内容

文档对象的主要属性包括字体属性、字符个数、行数、段落数等。用下面的代码设置文档中内容的字体属性。

code.vba
Sub Test()
  Dim doc As Document
  Dim rng As Range
  Set doc = Documents.Open("D:\test.docx")
  Set rng = doc.Content
  Debug.Print rng.Text
  rng.Font.Size = 20
  rng.Bold = True
End Sub

用下面的代码获取文档中的字符个数、行数和段落数等。

code.vba
Sub Test2()
  Dim doc As Document
  Dim rng As Range
  Set doc = Documents.Open("D:\test2.docx")
  '字符个数
  Debug.Print doc.ComputeStatistics(wdStatisticCharacters)
  '行数
  Debug.Print doc.ComputeStatistics(wdStatisticLines)
  '段落数
  Debug.Print doc.ComputeStatistics(wdStatisticParagraphs)
End Sub

文档的样式

Word文档样式包括内置样式和自定义样式。所有内置样式放在Styles集合中,可以通过遍历和索引获取指定样式。

下面的代码遍历活动文档的所有样式并显示它们的名称。

code.vba
Sub Test()
  '遍历Styles集合对象
  Dim sl As Style
  For Each sl In ActiveDocument.Styles
    Debug.Print sl.NameLocal
  Next
End Sub

下面的代码对Styles集合对象进行索引,获取指定的样式。可以使用索引号和名称两种方式进行索引。

code.vba
Sub Test2()
  Dim doc As Document
  Set doc = ActiveDocument
  Debug.Print doc.Styles(10).Font.Name
  Debug.Print doc.Styles("标题 2").Font.Name
  Debug.Print doc.Styles(wdStyleCaption).Font.Name
End Sub

下面的代码将找到的Style样式指定给Range对象的Style属性。

code.vba
Sub Test3()
  Dim doc As Document
  Dim rng As Range
  Set doc = Documents.Open("D:\test2.docx")
  Set rng = doc.Paragraphs(1).Range
  rng.Style = wdStyleNormal
End Sub

下面的代码自定义样式。首先用Styles对象的Add方法创建一个新的样式对象,然后通过给该对象的指定属性赋值来定义这个新的样式。定义好后,就可以像使用内置样式那样进行使用了。

code.vba
Sub Test4()
  Dim doc As Document
  Dim rng As Range
  Dim slMy As Style
  Set doc = Documents.Open("D:\test2.docx")
  '创建和定义新样式
  Set slMy = doc.Styles.Add(Name:="NewStyle", Type:=wdStyleTypeParagraph)
  slMy.Font.Bold = True
  slMy.Font.Size = 20
  slMy.Font.Name = "黑体"
  '使用新样式
  Set rng = doc.Paragraphs(1).Range
  rng.Style = "NewStyle"
End Sub

页面设置

下面的代码使用PageSetup对象对文档进行页面设置。

code.vba
Sub Test()
  Dim doc As Document
  Dim pg As PageSetup
  Set doc = Documents.Open("D:\test2.docx")
  Set pg = doc.PageSetup
  pg.Orientation = wdOrientLandscape
End Sub