处理 Range 对象

使用 Visual Basic 完成的一种常见任务是在文档中指定一个区域,然后对该区域进行某些操作,如插入文字或应用格式。 例如,您可能需要编写一个宏,用于在文档的某部分中查找一个单词或词组。 文档的一部分可以由 Range 对象表示。 标识 Range 对象后,就可以应用 Range 对象的方法和属性来修改该区域的内容。

Range 对象引用文档中的某一连续区域。 每个 Range 对象都是通过开始和结束字符位置来定义的。 与在文档中使用书签的方法类似,在 Visual Basic 过程中使用 Range 对象可以标识文档中的特定部分。 Range 对象可以小至一个插入点,或大至整个文档。 但是与书签不同, Range 对象只在定义它的过程运行时才存在。

StartEndStoryType 属性唯一标识 Range 对象。 StartEnd 属性返回或设置 Range 对象的开始和结束字符的位置。 文档开始处的字符位置为 0,第一个字符后的位置为 1,依此类推。 StoryType 属性的 WdStoryType 常量表示了多种 情景类型

注意

Range 对象与所选内容无关。 也就是说,可以定义和修改某区域而不改变当前的所选内容。 也可定义文档中的多个区域,而每个文档窗格中只有一处所选内容。

使用 Range 方法

使用 Document 对象的 Range 方法创建一个 Range 对象,该对象位于主文章中,具有给定的开始和终结点。 下面的示例创建一个 Range 对象,该对象从第一个字符的开始位置开始并延伸到第十个字符。

Sub SetNewRange() 
 Dim rngDoc As Range 
 Set rngDoc = ActiveDocument.Range(Start:=0, End:=10) 
End Sub

将属性或方法应用于 Range 对象时,可以看到已经创建了 Range 对象。 下面的示例对活动文档的前 10 个字符应用加粗格式。

Sub SetBoldRange() 
 Dim rngDoc As Range 
 Set rngDoc = ActiveDocument.Range(Start:=0, End:=10) 
 rngDoc.Bold = True 
End Sub

如果需要多次引用一个 Range 对象,可使用 Set 语句设置一个其值为该 Range 对象的变量。 但是,如果只需要对 Range 对象执行单个操作,则无需将对象存储在变量中。 只使用一个标识区域并更改 Bold 属性的指令,也能得到相同的结果。

Sub BoldRange() 
 ActiveDocument.Range(Start:=0, End:=10).Bold = True 
End Sub

类似于书签,一个区域可以跨越一组字符或标记文档中的某个位置。 下列示例中的 Range 对象的开始和结束位置相同。 该区域不包含任何文字。 下列示例在活动文档的开头插入文字。

Sub InsertTextBeforeRange() 
 Dim rngDoc As Range 
 Set rngDoc = ActiveDocument.Range(Start:=0, End:=0) 
 rngDoc.InsertBefore "Hello " 
End Sub

可以使用字符位置号(如上所示)定义范围的开始和终点,或者对 SelectionBookmarkRange 对象等对象使用“开始”和“结束”属性。 下面的示例创建一个 Range 对象,该对象从第二段开头开始,至第三段末尾结束。

Sub NewRange() 
 Dim doc As Document 
 Dim rngDoc As Range 
 
 Set doc = ActiveDocument 
 Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _ 
 End:=doc.Paragraphs(3).Range.End) 
End Sub

有关其他信息和示例,请参阅 Range 方法。

使用 Range 属性

Range 属性出现在多个对象(如 ParagraphBookmarkCell)上,并用于返回 Range 对象。 以下示例返回引用活动文档中第一段的 Range 对象。

Sub SetParagraphRange() 
 Dim rngParagraph As Range 
 Set rngParagraph = ActiveDocument.Paragraphs(1).Range 
End Sub

得到 Range 对象后,可使用它的任何属性或方法来修改该 Range 对象。 下列示例选定活动文档中的第二个段落并将所选内容居中。

Sub FormatRange() 
 ActiveDocument.Paragraphs(2).Range.Select 
 Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
End Sub

若要对同一个 Range 对象应用多种属性或方法,可使用 With…End With 结构。 下列示例设置活动文档中第一段的文字格式。

Sub FormatFirstParagraph() 
 Dim rngParagraph As Range 
 Set rngParagraph = ActiveDocument.Paragraphs(1).Range 
 With rngParagraph 
 .Bold = True 
 .ParagraphFormat.Alignment = wdAlignParagraphCenter 
 With .Font 
 .Name = "Stencil" 
 .Size = 15 
 End With 
 End With 
End Sub

有关其他信息和示例,请参阅 Range 属性主题。

重新定义 Range 对象

使用 SetRange 方法重新定义现有的 Range 对象。 下面的示例将一个区域定义为当前的所选内容。 然后应用 SetRange 方法以重新定义该区域,使之包含当前所选内容和接下来的 10 个字符。

Sub ExpandRange() 
 Dim rngParagraph As Range 
 Set rngParagraph = Selection.Range 
 rngParagraph.SetRange Start:=rngParagraph.Start, _ 
 End:=rngParagraph.End + 10 
End Sub

有关其他信息和示例,请参阅 DocumentRange 方法。

注意

调试宏时,可以使用 Select 方法确保 Range 对象引用正确的文本范围。 例如,下面的示例选择一个 Range 对象,该对象引用活动文档中的第二段和第三段,然后设置所选内容的字体格式。

Sub SelectRange() 
 Dim rngParagraph As Range 
 
 Set rngParagraph = ActiveDocument.Paragraphs(2).Range 
 
 rngParagraph.SetRange Start:=rngParagraph.Start, _ 
 End:=ActiveDocument.Paragraphs(3).Range.End 
 rngParagraph.Select 
 
 Selection.Font.Italic = True 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。