转自:http://www.exceloffice.net/archives/1598
在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 |
另一类是移动、定位、选择的方向枚举常量WdMovementType,WdCollapseDirection等。
如下所示:
名称 | 值 | 说明 | 常量的定义 |
wdExtend | 1 | 将当前的选择区域的结尾扩展到指定单位的结尾 | Const wdExtend=1 |
wdMove | 0 | 取消当前的选择区域,
然后将光标移动到指定单位的结尾 | Const wdMove=0 |
wdCollapseStart | 1 | 取消当前的选择区域,然后将光标定位到开头 | Const wdCollapseStart=1 |
wdCollapseEnd | 0 | 取消当前的选择区域,然后将光标定位到结尾 | Const wdCollapseEnd=0 |
1.使用Collapse方法快速取消选择内容区域,使光标不选中任何一个字符。
Visual Basic
Sub QQ1722187970() Const wdCollapseStart = 1 Const wdCollapseEnd = 0 With Word.Selection .Collapse (wdCollapseStart) '不带参数默认是wdCollapseStart .Collapse End With End Sub
1 2 3 4 5 6 7 8 9 | Sub QQ1722187970() Const wdCollapseStart = 1 Const wdCollapseEnd = 0 With Word.Selection .Collapse (wdCollapseStart) '不带参数默认是wdCollapseStart .Collapse End With End Sub |
如果在word文档中选中了某段文本内容区域,则运行上述代码将取消选中文本内容区域,光标将定位在取消选择前的文本内容区域的起始位置。如果把参数改为wdCollapseEnd,则定位在结束位置。
如果要折叠的区域是一个段落,则wdCollapseEnd后将定位在当前段落标记符之后的一个字符前,也就是下一个段落的开头。如果要折叠的区域是整个word文档的最后一个段落,则wdCollapseEnd后将定位到最后一个段落标记符前。
可以用以下的代码进行验证:
Visual Basic
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
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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方法使光标定位到指定单位内容的开头和结尾。
Visual Basic
Sub QQ1722187970() With Word.Selection .HomeKey wdLine Debug.Print .Start .EndKey wdLine Debug.Print .End End With End Sub
1 2 3 4 5 6 7 8 | Sub QQ1722187970() With Word.Selection .HomeKey wdLine Debug.Print .Start .EndKey wdLine Debug.Print .End End With End Sub |
上述代码将返回光标所在的内容区域的那一行的开始位置和那一行的结束位置。
如果要从当前光标所在的位置开始扩展选择的话,可以添加第二个参数,代码如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .HomeKey wdLine, wdExtend .EndKey wdLine, wdExtend End With End Sub
1 2 3 4 5 6 | Sub QQ1722187970() With Word.Selection .HomeKey wdLine, wdExtend .EndKey wdLine, wdExtend End With End Sub |
经过测试,HomeKey和 EndKey方法的第一个参数unit只能用wdLine和wdStory,其它单位都不能用。
3.使用StartOf、EndOf方法实现与HomeKey、EndKey类似的效果。
4.使用Expand方法扩展当前的选择区域
代码如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .Expand wdParagraph End With End Sub
1 2 3 4 5 | 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方法带参数时,它可以带一个字符参数,表示将与当前选择区域的结尾位置开始向下寻找该字符,如果找到了就扩展当前的选区到该字符。这里要特别注意的就是,该参数只能是一个字符,如果超过一个字符,该方法将会无效。
代码如下:
Visual Basic
Sub QQ1722187970() With Word.Selection .Extend "点" End With End Sub
1 2 3 4 5 | Sub QQ1722187970() With Word.Selection .Extend "点" End With End Sub |
利用这个方法可以实现很多逐字符判断的程序。
7.使用Move方法快速地前后移动任意的单位:
使用Move方法有两个参数,一个是Unit参数,表示要移动的单位,另一个参数是Count,表示要移动的单位数量,如果是负数则往前移动,如果是正数则往后移动。
比如如下的代码可以定位到中间的页面:
Visual Basic
Sub QQ1722187970() '当前位置插入一个分节符 Word.Selection.InsertBreak wdSectionBreakNextPage '继续插入一个分节符 Word.Selection.InsertBreak wdSectionBreakNextPage '定位到中间的页面 Word.Selection.Move wdSection, -1 End Sub
1 2 3 4 5 6 7 8 | Sub QQ1722187970() '当前位置插入一个分节符 Word.Selection.InsertBreak wdSectionBreakNextPage '继续插入一个分节符 Word.Selection.InsertBreak wdSectionBreakNextPage '定位到中间的页面 Word.Selection.Move wdSection, -1 End Sub |