改变Word中对象模型的属性
中国石化股份有限公司信息系统管理部 吴文旷
用户在 Word中操作的每一个东西都是一个对象,如文档、对话框、文本框、图形、图表甚至 Word本身都是对象,这些对象都有自己的属性和方法。因此,用户可以通过编程来访问这些已有的对象,改变它们的属性,以完成某些较特殊的操作。在对象模型中,还有一个重要的概念是集合( Collections)。所谓集合,就是一组相近对象的组合,属于一个更大的对象,例如 Sentences、 Words和 Characters对象,就可看成一个集合,它们隶属于 Range对象,集合的重要属性是可以对其进行整体操作。本文以改变 Word文档属性来说明 Word对象模型的应用。
Word文档属性的整体改变
我们有时想将Word文档的属性(如字体、字号等)作整体改变,最常见的例子是将整篇文档的字体都按比例增大或减小一号,如果整篇文档都采用同一属性,那么就可全选整个文档,然后改变属性即可;如果文档中的不同部分的属性不同,我们就很难对其进行整体操作,唯一的办法是选择文档的不同部分进行分别操作,这样做不仅费时,而且容易出错。若借助 Word的对象模型,我们就可轻易地对整个文档中的每一段、句和单词甚至是单个字的属性进行准确控制,下面以字号属性为例(其他属性类似),将文档中的所有字的字号都减小一号。
1.以 Paragraphs(段)为操作对象,将文档中的每一段的字号都减小一号
如果 Word文档中的各段落的字号不相同,但段落内部的字号都相同,则可以通过改变段落对象的字号属性来达到我们的目的。代码如下。
Sub paragraph()
On Error Resume Next
Dim myParagraph As paragraph
'对每一段落进行操作
For Each myParagraph In ActiveDocument.
Paragraphs
'如果该段落中的字号不尽一致或有其他格式, Word段落字号属性的返回值将为 99999,此时使用段落对象模型不能改变该段落的字号,故退到下一段
If myParagraph.Range.Font.Size >1000 Then Exit For
'将该段的字号减小一号
myParagraph.Range.Font.Size=myParagraph
.Range.Font.Size- 1
Next myParagraph
End Sub
2.以 Sentences(句子)为对象,将文档中每一句的字号都减小一号
……
Dim I, J As Integer
'统计每一段中句子的总数
J = myParagraph.Range.sentences.Count
For I = 1 To J
'防止同一句中出现不同的字号
If myParagraph.Range.sentences(I).Font.Size
>1000 Then Exit For
'将每一句的字号减小一号
myParagraph.Range.sentences(I).Font.Size=
myParagraph.Range.sentences(I).Font.Size- 1
Next I
……
3.以 Words(单词)为操作对象,将文档中的每一单词的字号都减小一号
……
For Each myParagraph In ActiveDocument.Paragraphs
'统计每一段中总单词数
J = myParagraph.Range.words.Count
'将每一个单词的字号减小一号
For I = 1 To J
myParagraph.Range.words(I).Font.Size = myParagraph.Range.words(I).Font.Size- 1
Next I
……
4.以 Characters(单字)为操作对象,将文档中的每一个字的字号减小一号
……
For Each myParagraph In ActiveDocument.Paragraphs
'统计每一段中总字数
J = myParagraph.Range.characters.Count
'将每一个字的字号减小一号
For I = 1 To J
myParagraph.Range.characters(I).Font
.Size=myParagraph.Range.characters(I).Font.Size- 1
Next I
……
带格式单词的替换
Word自身有替换命令 (ctrl+ h),但该命令的不足之处是,不能对带格式的单词进行替换,例如,要将整篇文档中的 H2CO3替换成 H2CO3,该命令就无能为力了。下面介绍如何借助 Word中的对象模型来实现替换。
Sub ReplaceWord()
On Error Resume Next
'对文档中的 H2CO3进行格式替换
Dim myParagraph As Paragraph
Dim I, J As Integer
Dim tmpStr As String
'对每一段进行操作
For Each myParagraph In ActiveDocument.Paragraphs
'统计该段的单词数
J = myParagraph.Range.words.Count
For I = 1 To J
'比较字符串,查找所有替换的单词
If (LCase(myParagraph.Range.words(I)) = " h2co3") Then
'选择所替换的单词
myParagraph.Range.words(I).Select
'替换单词,写入字母 H
Selection.TypeText Text:=" H"
'将其格式变为下标
Selection.Font.Subscript = True
'写入下标 2
Selection.TypeText Text:=" 2"
'字体变为正常体
Selection.Font.Subscript = False
'写入字母 CO
Selection.TypeText Text:=" CO"
'将其格式变为下标
Selection.Font.Subscript = True
'写入下标 3
Selection.TypeText Text:=" 3"
'字体变为正常体
Selection.Font.Subscript = False
End If
Next I
Next myParagraph
End Sub
上面程序段运行后,即可将文档中所有的 H2CO3全部替换成 H2CO3。而且,我们还可在 VBA中插入窗体,编写出同 Word替换命令类似的窗口界面,来进行带格式单词的替换。