WordVBA教程:处理Range对象
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WordVBA教程:处理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属性
有多种对象具有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属性主题。
重新定义 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。