如何用vba在word中快速移动或选中内容区域?

在word中经常需要操作特定位置的文本内容,定位文本内容就显得尤为重要。

在word vba中Range Selection 对象有多种移动、定位、选择文本内容的方法和属性。

在这些方法和属性中,有两类枚举常量是经常要用到的,一类是移动、定位、选择的单位常量WdUnits,比如是按照行、段落、单词、还是句子进行移动、定位。

以下就是在word中会用到的16种单位常量枚举:

名称 说明 常量的定义
wdCell 12 1个单元格 Const wdCell=12
wdCharacter 1 1个字符 Const wdCharacter=1
wdCharacterFormatting 13 字符格式 Const wdCharacterFormatting=13
wdColumn 9 一列 Const wdColumn=9
wdItem 16 选中的项目 Const wdItem=16
wdLine 5 一行 Const wdLine=5
wdParagraph 4 一个段落 Const wdParagraph=4
wdParagraphFormatting 14 段落格式 Const wdParagraphFormatting=14
wdRow 10 一行 Const wdRow=10
wdScreen 7 一个屏幕 Const wdScreen=7
wdSection 8 一个节 Const wdSection=8
wdSentence 3 一句话 Const wdSentence=3
wdStory 6 全文 Const wdStory=6
wdTable 15 一个表格 Const wdTable=15
wdWindow 11 一个窗口 Const wdWindow=11
wdWord 2 一个单词 Const wdWord=2

另一类是移动、定位、选择的方向枚举常量WdMovementTypeWdCollapseDirection等。

如下所示:

名称 说明 常量的定义
wdExtend 1 将当前的选择区域的结尾扩展到指定单位的结尾 Const wdExtend=1
wdMove 0 取消当前的选择区域,

然后将光标移动到指定单位的结尾

Const wdMove=0
wdCollapseStart 1 取消当前的选择区域,然后将光标定位到开头 Const wdCollapseStart=1
wdCollapseEnd 0 取消当前的选择区域,然后将光标定位到结尾 Const wdCollapseEnd=0

1.使用Collapse方法快速取消选择内容区域,使光标不选中任何一个字符。

Sub QQ1722187970()
    Const wdCollapseStart = 1
    Const wdCollapseEnd = 0
    With Word.Selection
        .Collapse (wdCollapseStart)
        '不带参数默认是wdCollapseStart
        .Collapse
    End With
End Sub

如果在word文档中选中了某段文本内容区域,则运行上述代码将取消选中文本内容区域,光标将定位在取消选择前的文本内容区域的起始位置。如果把参数改为wdCollapseEnd,则定位在结束位置。

如果要折叠的区域是一个段落,则wdCollapseEnd后将定位在当前段落标记符之后的一个字符前,也就是下一个段落的开头。如果要折叠的区域是整个word文档的最后一个段落,则wdCollapseEnd后将定位到最后一个段落标记符前。

可以用以下的代码进行验证:

Sub QQ1722187970()
    Dim oDoc As Document
    Set oDoc = Word.ActiveDocument
    Dim oRng As Range
    Dim oP As Paragraph
    With oDoc
        Set oP = .Paragraphs(1)
        Set oRng = oP.Range
        Debug.Print oRng.Start, oRng.End
        oRng.Collapse 0
         Debug.Print oRng.Start, oRng.End
    End With
End Sub

2.使用HomeKey和 EndKey方法使光标定位到指定单位内容的开头和结尾。

Sub QQ1722187970()
    With Word.Selection
        .HomeKey wdLine
        Debug.Print .Start
        .EndKey wdLine
        Debug.Print .End
    End With
End Sub

上述代码将返回光标所在的内容区域的那一行的开始位置和那一行的结束位置。

如果要从当前光标所在的位置开始扩展选择的话,可以添加第二个参数,代码如下:

Sub QQ1722187970()
    With Word.Selection
        .HomeKey wdLine, wdExtend
        .EndKey wdLine, wdExtend
    End With
End Sub

经过测试,HomeKey和 EndKey方法的第一个参数unit只能用wdLine和wdStory,其它单位都不能用。

3.使用StartOfEndOf方法实现与HomeKey、EndKey类似的效果。

4.使用Expand方法扩展当前的选择区域

代码如下:

Sub QQ1722187970()
    With Word.Selection
        .Expand wdParagraph
    End With
End Sub

它与EndOf、EndKey、HomeKey等方法不同的是,它会自动当当前选择区域左右扩展到指定的单位区域内,比如当选中某个段落中的某些文本内容时,使用上述代码将自动选中当前选择区域所在的整段段落区域。

5.使用Shrink方法不断地收缩选区

Shrink方法可以将当前的选择区域按照整个文档(entire document),节( section),段落( paragraph),句子( sentence),单词( word),插入点( insertion point)的顺序不断地收缩当前的选择区域。

6.使用Extend方法不断地扩展选区,或者按照指定的字符扩展选区。

与Shrink方法类似的,当使用Extend方法不带参数时,可以按照单词(word),句子( sentence),段落( paragraph),节( section),整个文档( entire document)这样的顺序依次扩展当前的选择区域。

当Extend方法带参数时,它可以带一个字符参数,表示将与当前选择区域的结尾位置开始向下寻找该字符,如果找到了就扩展当前的选区到该字符。这里要特别注意的就是,该参数只能是一个字符,如果超过一个字符,该方法将会无效。

代码如下:

Sub QQ1722187970()
    With Word.Selection
        .Extend "点"
    End With
End Sub

利用这个方法可以实现很多逐字符判断的程序。

7.使用Move方法快速地前后移动任意的单位:

使用Move方法有两个参数,一个是Unit参数,表示要移动的单位,另一个参数是Count,表示要移动的单位数量,如果是负数则往前移动,如果是正数则往后移动。

比如如下的代码可以定位到中间的页面:

Sub QQ1722187970()
    '当前位置插入一个分节符
    Word.Selection.InsertBreak wdSectionBreakNextPage
    '继续插入一个分节符
    Word.Selection.InsertBreak wdSectionBreakNextPage
    '定位到中间的页面
    Word.Selection.Move wdSection, -1
End Sub
       

仅有1条评论 发表评论

  1. Pingback引用通告: 如何用vba在word中快速移动或选中内容区域? – 内存网 /

  2. Pingback引用通告: 如何用vba在word中快速移动或选中内容区域? – 算法网 /

发表评论