Selection和Range对象

2 篇文章 0 订阅
前言
    其实在对word操作的时候Range对象用到的是最多的, 又由于Range对象与 Selection对象共享许多相同的方法和属性,所以今天我们将他俩放到一起来介绍下,看看他们有哪些共同和不同的地方。


正题
1.处理 Selection对象
    
用 Word 处理文档时,通常先选定文字,然后对所选内容进行操作,例如设置文字格式或键入文字。在 Visual Basic 中,通常不需要在修改文字前选定文字。而是创建一个引用文档中指定区域的Range对象。有关定义 Range对象的信息,请参阅处理 Range对象。但是,如果希望代码响应或更改所选内容,可使用Selection对象。


Select方法可激活一个对象。例如,下列指令选定活动文档中的第一个单词。

Sub SelectFirstWord()
    ActiveDocument.Words(1).Select
End Sub

Selection属性返回一个Selection对象,该对象代表文档窗口的窗格中活动的所选内容。文档窗口的每个窗格中只能有一个 Selection对象,并且只能有一个活动的 Selection对象。例如,下列示例更改所选内容中的段落格式。

Sub FormatSelection()
    Selection.Paragraphs.LeftIndent = InchesToPoints(0.5)
End Sub

例如,下列示例在所选内容后插入单词“Hello”。

Sub InsertTextAfterSelection()
    Selection.InsertAfter Text:="Hello "
End Sub

下列示例对选定的文字应用加粗格式。

Sub BoldSelectedText()
    Selection.Font.Bold = True
End Sub

下列示例是宏录制器创建的。该宏对文档中的前两个单词应用加粗格式。

Sub Macro()
    Selection.HomeKey Unit:=wdStory
    Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
    Selection.Font.Bold = wdToggle
End Sub

下列示例在不使用 Selection属性的情况下完成相同的任务。

Sub WorkingWithRanges()
    ActiveDocument.Range(Start:=0, _
        End:=ActiveDocument.Words(2).End).Bold = True
End Sub

2. 处理Range对象


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


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


Start、End 和StoryType属性唯一地标识一个 Range对象。Start 和 End属性返回或设置 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

使用上述字符位置编号或使用诸如Selection、Bookmark 或 Range 的 Start 和 End属性可定义区域的开始和结束位置。下列示例创建一个 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属性,例如Paragraph、Bookmark 和Cell,并且该属性用于返回 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对象


使用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

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

小结
    当没有必要修改当前所选内容时,推荐使用 Range对象修改文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值