前言:将Excel与Word合理地整合交互,往往能够获得很好的效果,极大地提高办公自动化效率。例如,将数据存放在Excel工作表中,Word文档按需自动化提取其中的特定数据;或者使用Excel来分析数据,然后以Word文档来呈现分析结果,等等。本专题先讲解了Word对象模型中常用的对象,让大家先熟悉VBA是如何操控Word文档的,有了一定的Word VBA基础知识后,再通过详细的示例演示Excel与Word交互的技术。
了解Word对象模型
与Excel一样,我们使用VBA来调用Word对象模型中的对象及其属性、方法和事件,从而实现对Word的控制。Word对象模型似乎有点复杂,涵盖了整个Word应用程序、文档、文档内的段落、段落内的句子、句子中的词语、词语内的字符、表格内的单元格……等等。其中一些常用的对象如下图1所示。
图1:一些常用的Word对象
Application对象
代表Word应用程序本身。
Document对象
代表Word文档,类似于Excel工作簿对象。
Paragraphs对象
代表文档的段落。
Sentences对象
代表句子。
Words对象
代表单词。
Characters对象
代表字符。
Selection对象
代表文档中所选择的内容。
Bookmarks对象
代表文档中的书签。
Range对象
代表文档中一个由起始点和中止点所确定的连续区域。
Sections对象
代表节。
Fonts对象
代表字体。
Templates对象
代表Word文档模板。
下图2展示了Word文档中的一些常用对象。
图2:文档文本对应的常用对象示例
以上图2中所选择的段落为例,使用VBA代码来对其进行分析。
下面的代码分析上图2所选文字区域的段落和句子:
'分析所选文字区域的段落和句子
Dim str As String
Dim rng As Range
Dim i As Long
str = "所选区域的段落数:"& _
Selection.Paragraphs.Count & _
vbCrLf & vbCrLf & _
"所选区域的句子数:" & _
Selection.Sentences.Count & _
vbCrLf & _
"句子分别是:" & vbCrLf
For i = 1 To Selection.Sentences.Count
str = str & "第" & i& "句" & ": "
str = str & Selection.Sentences.Item(i)
str = str & vbCrLf
Next i
MsgBox str
结果如下图3所示。
图3:上图1所选文本中段落和句子的分析结果
可以看出,Word VBA是以“。”或“.”为分隔符来拆分出句子的。
下面的代码分析上图2所选文字区域的词语和字符:
'分析所选文字区域的词语和字符
Dim str As String
Dim rng As Range
Dim i As Long
str = "所选区域的词语数:"& _
Selection.Words.Count & _
vbCrLf & vbCrLf & _
"所选区域的字符数:" & _
Selection.Characters.Count & _
vbCrLf & vbCrLf & _
"其中的词语分别是:" & vbCrLf
i = 0
For Each rng In Selection.Words
str = str & rng.Text
str = str & vbTab
i = i 1
'每行8个词
If (i Mod 8) = 0 Then
str = str & vbCrLf
End If
Next rng
MsgBox str
结果如下图4所示。
图4:上图1所选文本中词和字符的分析结果
可以看出,Word VBA将符号作为一个词。