全部显示

处理 Range 对象

   

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

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

StartEndStoryType 属性唯一地标识一个 Range 对象。StartEnd 属性返回或设置 Range 对象的开始和结束字符的位置。文档开始处的字符位置为 0,第一个字符后的位置为 1,以此类推。StoryType 属性的 WdStoryType 常量可以代表 11 种不同的文字部分类型。

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

使用 Range 方法

Range 方法用于在指定的文档中创建 Range 对象。Range 方法(该方法可用于 Document 对象)通过给定开始和结束位置,返回一个位于主文字部分中的 Range 对象。下列示例创建一个赋给变量的 Range 对象。

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

该变量引用活动文档中的前 10 个字符。当您将属性或方法应用于保存在变量中的 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

使用上述字符位置编号或使用诸如 SelectionBookmarkRangeStartEnd 属性可定义区域的开始和结束位置。下列示例创建一个 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 = wdAlignParagraphJustify
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

其他内容和示例,请参阅 SetRange 方法。

注意  调试宏时,可使用 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