处理Selection对象和Range对象——Word VBA中重要的两个对象
Word 开发人员参考
Selection 对象
代表窗口或窗格中的当前所选内容。所选内容代表文档中选定(或突出显示)的区域,如果文档中没有选定任何内容,则代表插入点。每个文档窗格只能有一个 Selection 对象,并且在整个应用程序中只能有一个活动的 Selection 对象。
说明
可以使用 Selection 属性返回 Selection 对象。如果 Selection 属性未使用对象限定符,则 Microsoft Office Word 返回活动文档窗口的活动窗格中的所选内容。以下示例从活动文档中复制当前所选内容。
Selection.Copy
以下示例删除 Documents 集合中第三个文档的所选内容。访问该文档的当前所选内容时,该文档无需处于活动状态。
Documents(3).ActiveWindow.Selection.Cut
以下示例复制活动文档第一个窗格中的所选内容,并将其粘贴到第二个窗格中。
ActiveDocument.ActiveWindow.Panes(1).Selection.Copy
ActiveDocument.ActiveWindow.Panes(2).Selection.Paste
Text 属性是 Selection 对象的默认属性。使用此属性可设置或返回当前所选内容中的文本。以下示例将当前所选内容中的文本赋给变量 strTemp。如果最后一个字符是段落标记,则删除该字符。
Dim strTemp as String
strTemp = Selection.Text
If Right(strTemp, 1) = vbCr Then _
strTemp = Left(strTemp, Len(strTemp) - 1)
Selection 对象有多种方法和属性,可用于折叠、扩展或以其他方式更改当前所选内容。以下示例将插入点移至文档末尾并选择最后三行。
Selection.EndOf Unit:=wdStory, Extend:=wdMove
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveUp Unit:=wdLine, Count:=2, Extend:=wdExtend
Selection 对象有多种方法和属性,可用于编辑文档中的所选文字。以下示例选择活动文档中的第一句,并用新段落替换该句。
Options.ReplaceSelection = True
ActiveDocument.Sentences(1).Select
Selection.TypeText "Material below is confidential."
Selection.TypeParagraph
以下示例删除 Documents 集合中第一个文档的最后一段,并将其粘贴到第二个文档的开头。
With Documents(1)
.Paragraphs.Last.Range.Select
.ActiveWindow.Selection.Cut
End With
With Documents(2).ActiveWindow.Selection
.StartOf Unit:=wdStory, Extend:=wdMove
.Paste
End With
Selection 对象有多种方法和属性,可用于更改当前所选内容的格式。以下示例将当前所选内容的字体从 Times New Roman 更改为 Tahoma。
If Selection.Font.Name = "Times New Roman" Then _
Selection.Font.Name = "Tahoma"
可以使用 Flags、Information 和 Type 等属性返回有关当前所选内容的信息。您可以在某个过程中使用以下示例来确定活动文档中是否选择了内容,如果未选择,则跳过该过程的其余部分。
If Selection.Type = wdSelectionIP Then
MsgBox Prompt:="You have not selected any text! Exiting procedure..."
Exit Sub
End If
即使将所选内容折叠到插入点,相应内容也不一定为空。例如,Text 属性仍将字符返回到插入点右侧,此字符也会出现在 Selection 对象的 Characters 集合中。但是,从折叠的所选内容调用 Cut 或 Copy 等方法将引起错误。
用户可以选择文档中不代表连续文本的区域(例如,在使用 Alt 键和鼠标时)。由于这种所选内容的行为不可预知,因此,您可能希望在代码中包含一个步骤,先检查所选内容的 Type 属性,然后再对它执行任意操作 (Selection.Type = wdSelectionBlock)。同样,包含表格单元格的所选内容也会导致不可预知的行为。Information 属性将指示所选内容是否在某个表中 (Selection.Information(wdWithinTable) = True)。以下示例确定所选内容是否正常(例如,它不是表中的行或列,也不是垂直文本块,等等),您可以先用该示例对当前所选内容进行测试,然后再对它执行任意操作。
If Selection.Type <> wdSelectionNormal Then
MsgBox Prompt:="Not a valid selection! Exiting procedure..."
Exit Sub
End If
由于 Range 对象与 Selection 对象的许多方法和属性都相同,因此,如果没有必要对当前所选内容进行实际更改,最好使用 Range 对象来处理文档。有关 Selection 对象和 Range 对象的详细信息,请参阅处理 Selection 对象和处理 Range 对象。
? 2006 Microsoft Corporation。保留所有权利。
=================================================================================
Word 开发人员参考
处理 Selection 对象
用 Microsoft Office Word 处理文档时,通常先选定文字,然后对所选内容执行操作,例如设置文字格式或键入文字。在 Microsoft Visual Basic 中,通常不需要在修改文字前先选定文字,而是创建一个引用文档中特定区域的 Range 对象。有关定义 Range 对象的信息,请参阅处理 Range 对象。但是,如果希望代码响应或更改所选内容,则可使用 Selection 对象。
如果尚未选定文本,可使用 Select 方法选择与特定对象关联的文本并创建一个 Selection 对象。例如,下面的指令选定活动文档中的第一个单词。
Sub SelectFirstWord()
ActiveDocument.Words(1).Select
End Sub
有关详细信息,请参阅在文档中选定文字。
如果已经选定文本,可使用 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
宏录制器经常会创建使用 Selection 对象的宏。下面的示例是使用宏录制器创建的。该宏选择活动文档中的前两个单词并对其应用加粗格式。
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
? 2006 Microsoft Corporation。保留所有权利。
=================================================================================
Word 开发人员参考
Range 对象
代表文档中的一个连续区域。每个 Range 对象由一个起始字符位置和一个终止字符位置定义。
说明
与书签在文档中的使用方法类似,Range 对象在 Visual Basic 过程中用来标识文档的特定部分。但与书签不同的是,Range 对象只在定义该对象的过程运行时才存在。Range 对象独立于所选内容。也就是说,您可以定义和处理一个范围而无需更改所选内容。还可以在文档中定义多个范围,但每个窗格中只能有一个所选内容。
使用 Range 方法可返回一个 Range 对象,该对象由指定的起始和终止字符位置定义。以下示例返回一个代表活动文档中前 10 个字符的 Range 对象。
Set myRange = ActiveDocument.Range(Start:=0, End:=10)
使用 Range 属性可返回一个 Range 对象,该对象由另一对象的起点和终点定义。Range 属性可应用于许多对象(例如,Paragraph、Bookmark 和 Cell)。以下示例返回一个代表活动文档中第一段的 Range 对象。
Set aRange = ActiveDocument.Paragraphs(1).Range
以下示例返回一个代表活动文档中第二至第四段的 Range 对象。
Set aRange = ActiveDocument.Range( _
Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End)
有关处理 Range 对象的详细信息,请参阅处理 Range 对象。
? 2006 Microsoft Corporation。保留所有权利。
=================================================================================
Word 开发人员参考
处理 Range 对象
全部显示
全部隐藏
使用 Microsoft 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 方法
使用 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
可以使用上述字符位置编号,或通过将 Start 和 End 属性用于 Selection、Bookmark 或 Range 等对象,来定义区域的开始和结束位置。下面的示例创建一个 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 = 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
有关其他信息和示例,请参阅 Document 的 Range 方法。
注释
调试宏时,可以使用 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
? 2006 Microsoft Corporation。保留所有权利。
=========================================================================
Word 开发人员参考
WdStoryType 枚举
指定选定内容或项目的部分类型。
名称 值 描述
wdCommentsStory 4 批注部分。
wdEndnoteContinuationNoticeStory 17 尾注延续标记部分。
wdEndnoteContinuationSeparatorStory 16 尾注延续分隔符部分。
wdEndnoteSeparatorStory 15 尾注分隔符部分。
wdEndnotesStory 3 尾注部分。
wdEvenPagesFooterStory 8 偶数页页脚部分。
wdEvenPagesHeaderStory 6 偶数页页眉部分。
wdFirstPageFooterStory 11 首页页脚部分。
wdFirstPageHeaderStory 10 首页页眉部分。
wdFootnoteContinuationNoticeStory 14 脚注延续标记部分。
wdFootnoteContinuationSeparatorStory 13 脚注延续分隔符部分。
wdFootnoteSeparatorStory 12 脚注分隔符部分。
wdFootnotesStory 2 脚注部分。
wdMainTextStory 1 正文部分。
wdPrimaryFooterStory 9 主页脚部分。
wdPrimaryHeaderStory 7 主页眉部分。
wdTextFrameStory 5 文本框架部分。
=========================================================================
Word 开发人员参考
WdUnits 枚举
指定要使用的度量单位。
名称 值 描述
wdCell 12 单元格。
wdCharacter 1 字符。
wdCharacterFormatting 13 字符格式。
wdColumn 9 列。
wdItem 16 所选项。
wdLine 5 一个线段。
wdParagraph 4 段落。
wdParagraphFormatting 14 段落格式。
wdRow 10 行。
wdScreen 7 屏幕尺寸。
wdSection 8 一节。
wdSentence 3 句子。
wdStory 6 部分。
wdTable 15 一个表格。
wdWindow 11 窗口。
wdWord 2 字。
? 2006 Microsoft Corporation。保留所有权利。
=========================================================================
Word 开发人员参考
WdSelectionType 枚举
指定选择类型。
名称 值 描述
wdNoSelection 0 没有选定内容。
wdSelectionBlock 6 列方式选定。
wdSelectionColumn 4 列选择。
wdSelectionFrame 3 框架选择。
wdSelectionInlineShape 7 内嵌形状选择。
wdSelectionIP 1 内嵌段落选择。
wdSelectionNormal 2 标准的或用户定义的选择容。
wdSelectionRow 5 行选择。
wdSelectionShape 8 形状选择。
? 2006 Microsoft Corporation。保留所有权利。
=========================================================================
Word 开发人员参考
Selection.Information 属性
返回有关指定的选定内容的信息。Variant 类型,只读。
语法
表达式.Information(Type)
表达式 必选。一个代表 Selection 对象的变量。
参数
名称 必选/可选 数据类型 描述
Type 必选 WdInformation 信息类型。
示例
本示例显示当前页码和活动文档的总页数。
Visual Basic for Applications
MsgBox "The selection is on page " & _
Selection.Information(wdActiveEndPageNumber) & " of page " _
& Selection.Information(wdNumberOfPagesInDocument)
如果选定内容位于一个表格中,则本示例选定该表格。
Visual Basic for Applications
If Selection.Information(wdWithInTable) Then _
Selection.Tables(1).Select
本示例显示一条消息,表明当前的节号。
Visual Basic for Applications
Selection.Collapse Direction:=wdCollapseStart
MsgBox "The insertion point is in section " & _
Selection.Information(wdActiveEndSectionNumber)
? 2006 Microsoft Corporation。保留所有权利。
======================================================================
Word 开发人员参考
WdInformation 枚举
指定返回的涉及指定所选内容或区域的信息的类型。
名称 值 描述
wdActiveEndAdjustedPageNumber 1 返回页码,在该页中包含指定的所选内容或区域的活动结尾。如果设置一个起始页码或进行其他手动调整,则返回经调整的页码(与 wdActiveEndPageNumber 不同)。
wdActiveEndPageNumber 3 返回页码,在该页中包含指定的所选内容或区域的活动结尾。从文档开头计数。忽略任何对页码的手动调整(与 wdActiveEndAdjustedPageNumber 不同)。
wdActiveEndSectionNumber 2 返回节号,在该节中包含了指定的所选内容或区域的活动结尾。
wdAtEndOfRowMarker 31 如果指定的所选内容或区域位于表格的行结尾标记处,则该参数返回 True。
wdCapsLock 21 如果 Caps Lock 有效,则该参数返回 True。
wdEndOfRangeColumnNumber 17 返回表格列号,在该表格列中包含指定的所选内容或区域的结尾。
wdEndOfRangeRowNumber 14 返回表格行号,在该表格行中包含指定的所选内容或区域的结尾。
wdFirstCharacterColumnNumber 9 返回指定的所选内容或区域中第一个字符的位置。如果所选内容或区域是折叠的,则返回紧靠所选内容或区域右侧的字符编号(该编号与状态栏中“列”后面的字符列数相同)。
wdFirstCharacterLineNumber 10 返回指定的所选内容或区域中第一个字符的位置。如果所选内容或区域是折叠的,则返回紧靠所选内容或区域右侧的字符编号(该编号与状态栏中“行”后面的字符行数相同)。
wdFrameIsSelected 11 如果所选内容或区域是一个完整的图文框或文本框,则该参数返回 True。
wdHeaderFooterType 33 返回一个值,该值指示包含了指定所选内容或区域的页眉或页脚的类型。有关其他信息,请参阅“注解”部分中的表。
wdHorizontalPositionRelativeToPage 5 返回指定的所选内容或区域的水平位置。该位置是所选内容或区域的左边缘与页面的左边缘之间的距离,以磅为单位(1 磅 = 20 缇,72 磅 = 1 英寸)。如果所选内容或区域未显示在屏幕上,则该参数返回 -1。
wdHorizontalPositionRelativeToTextBoundary 7 返回指定所选内容或区域相对于周围最近的正文边界左边缘的水平位置,以磅为单位(1 磅 = 20 缇,72 磅 = 1 英寸)。如果所选内容或区域未显示在屏幕上,则该参数返回 -1。
wdInClipboard 38 有关该常量的信息,请参阅包含在 Microsoft Office Macintosh Edition 中的语言参考帮助。
wdInCommentPane 26 如果指定的所选内容或区域位于批注窗格,则该参数返回 True。
wdInEndnote 36 如果指定的所选内容或区域位于页面视图的尾注区内,或者位于普通视图的尾注窗格中,则该参数返回 True。
wdInFootnote 35 如果指定的所选内容或区域位于页面视图的脚注区内,或者位于普通视图的脚注窗格中,则该参数返回 True。
wdInFootnoteEndnotePane 25 如果指定的所选内容或区域位于普通视图的脚注或尾注窗格中,或页面视图的脚注或尾注区内,则该参数返回 True。有关详细信息,请参阅前面关于 wdInFootnote 和 wdInEndnote 的说明。
wdInHeaderFooter 28 如果指定的所选内容或区域位于页眉或页脚窗格中,或者位于页面视图的页眉或页脚中,则该参数返回 True。
wdInMasterDocument 34 如果所选内容或区域位于主控文档(即至少包含一个子文档的文档)中,则该参数返回 True。
wdInWordMail 37 如果指定的所选内容或区域位于页眉或页脚窗格中,或者位于页面视图的页眉或页脚中,则该参数返回 True。
wdMaximumNumberOfColumns 18 返回所选内容或区域中任何行的最大表格列数。
wdMaximumNumberOfRows 15 返回指定的所选内容或区域中表格的最大行数。
wdNumberOfPagesInDocument 4 返回与所选内容或区域相关联的文档的页数。
wdNumLock 22 如果 Num Lock 有效,则该参数返回 True。
wdOverType 23 如果启用改写模式,则该参数返回 True。可使用 Overtype 属性改变改写模式的状态。
wdReferenceOfType 32 返回一个值,该值表明所选内容相对于脚注、尾注或批注引用的位置,如“注解”部分中的表所示。
wdRevisionMarking 24 如果打开修订功能,则该参数返回 True。
wdSelectionMode 20 返回一个值,该值表明当前的选定模式,如下表所示。
wdStartOfRangeColumnNumber 16 返回表格列号,在该表格列中包含所选内容或区域的起点。
wdStartOfRangeRowNumber 13 返回表格行号,在该表格行中包含所选内容或区域的起点。
wdVerticalPositionRelativeToPage 6 返回所选内容或区域的垂直位置,即所选内容的上边缘与页面的上边缘之间的距离,以磅为单位(1 磅 = 20 缇,72 磅 = 1 英寸)。如果所选内容未显示在文档窗口中,则该参数返回 -1。
wdVerticalPositionRelativeToTextBoundary 8 返回所选内容或区域相对于周围最近的正文边界的上边缘的垂直位置,以磅为单位(1 磅 = 20 缇,72 磅 = 1 英寸)。该参数可用于在图文框或表格中确定插入点位置。如果所选内容未显示在屏幕中,则该参数返回 -1。
wdWithInTable 12 如果所选内容位于表格中,则该参数返回 True。
wdZoomPercentage 19 返回由 Percentage 属性设置的当前的放大百分比。
说明
下表列出了 wdHeaderFooterType 的可能值。
值 页眉或页脚的类型
-1 无(所选内容或区域不在页眉或页脚中)
0(零) 偶数页页眉
1 奇数页页眉(或在不区分奇数和偶数页时的页眉)
2 偶数页页脚
3 奇数页页脚(或在不区分奇数和偶数页时的页脚)
4 第一个页眉
5 第一个页脚
下表列出了 wdReferenceOfType 的可能值。
值 说明
-1 所选内容或区域包含但不限于脚注、尾注或批注引用。
0(零) 所选内容或区域不在脚注、尾注或批注引用之前。
1 所选内容或区域位于脚注引用之前。
2 所选内容或区域位于尾注引用之前。
3 所选内容或区域位于批注引用之前。
下表列出了 wdSelectionMode 的可能值。
值 选定模式
0(零) 常规选定模式
1 扩展选定模式(“扩展”出现在状态栏上)
2 列选择模式(“列”出现在状态栏上)
? 2006 Microsoft Corporation。保留所有权利。
======================================================================
Word 开发人员参考
选定文档中的文本
使用 Select 方法可以选择文档中的对象。Select 方法可用于多个对象,例如 Bookmark、Field、Range 和 Table。下面的示例选定活动文档中的第一个表格。
Sub SelectTable()
ActiveDocument.Tables(1).Select
End Sub
下面的示例选定活动文档中的第一个域。
Sub SelectField()
ActiveDocument.Fields(1).Select
End Sub
下面的示例选定活动文档中的前四个段落。Range 方法用于创建一个引用前四个段落的 Range 对象,然后将 Select 方法应用于 Range 对象。
Sub SelectRange()
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Paragraphs(1).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End)
rngParagraphs.Select
End Sub
有关详细信息,请参阅处理 Selection 对象。