[返回]
计算机世界2000年第55期

改变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替换命令类似的窗口界面,来进行带格式单词的替换。