前言
其实在对word操作的时候Range对象用到的是最多的, 又由于Range对象与 Selection对象共享许多相同的方法和属性,所以今天我们将他俩放到一起来介绍下,看看他们有哪些共同和不同的地方。
正题
1.处理 Selection对象
用 Word 处理文档时,通常先选定文字,然后对所选内容进行操作,例如设置文字格式或键入文字。在 Visual Basic 中,通常不需要在修改文字前选定文字。而是创建一个引用文档中指定区域的Range对象。有关定义 Range对象的信息,请参阅处理 Range对象。但是,如果希望代码响应或更改所选内容,可使用Selection对象。
Select方法可激活一个对象。例如,下列指令选定活动文档中的第一个单词。
Selection属性返回一个Selection对象,该对象代表文档窗口的窗格中活动的所选内容。文档窗口的每个窗格中只能有一个 Selection对象,并且只能有一个活动的 Selection对象。例如,下列示例更改所选内容中的段落格式。
例如,下列示例在所选内容后插入单词“Hello”。
下列示例对选定的文字应用加粗格式。
下列示例是宏录制器创建的。该宏对文档中的前两个单词应用加粗格式。
下列示例在不使用 Selection属性的情况下完成相同的任务。
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对象。
该变量引用活动文档中的前 10 个字符。当您将属性或方法应用于保存在变量中的 Range对象时,可以看到已经创建了 Range对象。下列示例对活动文档中的前 10 个字符应用加粗格式。
如果需要多次引用一个 Range对象,可使用 Set 语句将该 Range对象赋给一个变量。但是,如果仅需要对 Range对象进行单独的一次操作,则不必将该对象保存在变量中。只使用一个标识区域并更改Bold属性的指令,也能得到相同的结果。
类似于书签,一个区域可以跨越一组字符或标记文档中的某个位置。下列示例中的 Range对象的开始和结束位置相同。该区域不包含任何文字。下列示例在活动文档的开头插入文字。
使用上述字符位置编号或使用诸如Selection、Bookmark 或 Range 的 Start 和 End属性可定义区域的开始和结束位置。下列示例创建一个 Range对象,该对象从第二段开头开始,至第三段末尾后结束。
使用 Range属性
有多种对象具有 Range属性,例如Paragraph、Bookmark 和Cell,并且该属性用于返回 Range对象。下列示例返回一个 Range对象,该对象引用活动文档中的第一个段落。
得到 Range对象后,可使用它的任何属性或方法来修改该 Range对象。下列示例选定活动文档中的第二个段落并将所选内容居中。
若要对同一个 Range对象应用多种属性或方法,可使用 With…End With 结构。下列示例设置活动文档中第一段的文字格式。
重新定义 Range对象
使用SetRange方法可重新定义现有的 Range对象。下列示例将一个区域定义为当前的所选内容。然后应用 SetRange方法重新定义该区域,使之包含当前所选内容和接下来的 10 个字符。
注意 调试宏时,可使用Select方法来确保 Range对象引用正确的文字区域。例如,下列示例选定一个引用活动文档中第二段和第三段的 Range对象。然后设置所选内容的字体格式。
小结
当没有必要修改当前所选内容时,推荐使用 Range对象修改文档。
其实在对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对象修改文档。