接下来当然就是打开Word VBA编辑器,开始设计程序逻辑。对于本例任务,既然我们的目标是 “把符合条件的某个段落写入新文档” ,所以一个很自然的想法就是 “循环遍历当前文档的每一个段落,每循环到一个段落,就检查其是否符合条件 ”。那么怎样循环遍历每个段落呢?我们在《提高篇》和《实战篇》中都讲过:代表整个 Word 文档的Document 对象有一个集合属性 Paragraphs,里面存放了很多Paragraph对象,而每一个Paragraph对象就是一个段落。因此,使用 For Each 就可以遍历当前文档中的每一个段落。
在找到每一个段落之后,我们又该怎样判断该段落是否 “符合条件(也就是包含 ‘恐怖如斯’)” 而应写入新文档呢?首先,假如程序中用变量 p 代表当前正在处理的段落,那么 就像《提高篇》中介绍的,p.Range 属性就代表该段落中所有文字、版式等信息;再进一步,p.Range.Text 代表的就是这个段落中的纯粹文字内容。所以,只要判断这个文字内容中是否包含 “恐怖如斯” 就能知道段落 p 该不该被作为结果。而在VBA中,判断文字包含的最简单写法,就是我们在《基础篇》中介绍的 Instr 函数!
除了 Text 外,段落对象的 Range 属性还提供了一个 Information 方法,只要给它提供不同的参数,它就可以返回给我们有关该段落的各种信息。例如,p.Range.Information (wdActiveEndPageNumber ) 就可以告诉我们 “段落p的内容处于文档中的第几页”。所以利用这个方法,我们不仅可以把符合条件的段落提取到新文档中,而且还可以标记出该段落在原文档的位置,以便检索。