转自: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

其它相关文章推荐:

  • 如何用vba获得word range对象所在的行的文本内容?
  • 如何用vba判断word文档中是否有高亮(颜色)的文字?
  • 如何用vba批量删除Word文档中的空白页?
  • 如何用vba删除access数据库中表的记录?
  • 如何用vba实现将ppt幻灯片中的图片批量导出为独立的图片文件?
  • 如何用vba创建一个空白的zip压缩文件?

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

  1. 如何用word写书_如何用vba在word中添加打勾的方框?

    最近在做word vba项目,遇到个需求,需要根据条件判断批量输出打√的方框和不打√的方框,类似如下图所示: 本来以为是个很容易的事情,没想到阻碍不小. 首先,我们先看看如何在word文档中手动输入带 ...

  2. 通过VBA将word中的表格导入到excel中

    通过VBA将word中的表格导入到excel中 由于项目需要,需要将word中的表格按照格式导入到excel中,所以通过在word中写VBA程序的方式将word的内容导出到excel中. 1.添加&q ...

  3. 如何用python读取文本中指定行的内容

    如何用python读取文本中指定行的内容 搜索资料 我来答 分享 新浪微博 QQ空间 浏览 5284 次 查看全文 http://www.taodudu.cc/news/show-64036.ht ...

  4. word中怎么快速选中光标之前或之后的全部内容?

    在Word中,快速选中=光标之后=的全部内容的快捷键:Ctrl + Shift + End: 在Word中,快速选中=光标之前=的全部内容的快捷键:Ctrl + Shift + Home. 在Word ...

  5. 利用VBA在Word中排出漂亮的代码

    引言 在学习编程的过程中,常常会使用word来做笔记,下面我将对如何利用word宏来进行代码的排版进行说明 1.工具 我用的是word2007,word2003和word2010操作也差不多 2.基本 ...

  6. 枚举如何设置空白_2019-07-04 用VBA设置word中shape对象相对位置

    在excelhome上看到一个提问 Excel 请教:用代码插入文本框,不随文字移动.-ExcelVBA程序开发-ExcelHome技术论坛 -​club.excelhome.net 本以为可以通过录 ...

  7. 如何用vba把word文档的每页单独保存为一个word文档

    要将word文档的每页单独保存为一个word文档,首先需要能够逐页遍历word文档. 逐页遍历word文档可以使用word的定位功能. 代码如下: Sub SplitToOnePage()Const ...

  8. Word控件Spire.Doc 【文本】教程(14) ;如何用图片替换Word中的文字

    在 Spire.Doc 的教程部分,我们介绍了"用 C# 中的表格替换 Word 中的文本"和"用 C# 中的文本替换 Word 中的图像"的简单方法.有时,我 ...

  9. word中插入公式的快捷键_如何使用插入键在Word中插入复制的内容

    word中插入公式的快捷键 In Word, the "Insert" key on the keyboard can be used to switch between Inse ...

最新文章

  1. usaco Shaping Regions
  2. 网站SEO优化之如何提升网站的流量?
  3. VTK:PolyData之AlignFrames
  4. mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证
  5. Spring Boot Data JPA
  6. Java文档阅读笔记-EJB Tutorial
  7. 美图回应meitu商标纠纷:不影响主营业务 社交业务商标完备
  8. python 比较序列是否包含同样元素_Python学习之常见序列比较
  9. 23. Linux 主机上的用户信息传递
  10. 前端开发面试题收集 JS
  11. Python二维数组,坑苦了
  12. LR学习笔记十 之 场景分析
  13. abaqus2017安装后启动cae报错_Abaqus2017安装全过程
  14. VMware端口映射
  15. 计算机及软件工程专业基础综合,2019年东华大学854计算机及软件工程专业基础综合考研初试大纲...
  16. Excel单元格下拉选择,单元格自动计算
  17. eureka集群 ha_eureka集群基于DNS配置方式
  18. 小米刷机指南 |使用MiFlash刷机一直flashing|小米手机忘记密码|小米手机清理数据
  19. pip install 报错:ERROR: Exception: Traceback (most recent call last):..raise ValueError(“check_hostnam
  20. 智能营销增益(Uplift Modeling)模型——pylift库的使用(二)

热门文章

  1. 好佳居窗帘十大品牌 窗帘风格你知道多少?
  2. 【COMP207 LEC10-12】
  3. 初识jsp之登录—登录成功—登录失败页面
  4. 数字孪生配电网的应用价值
  5. Docker学习笔记(八)Docker0网络解析
  6. 10%中干去职:腾讯掀起史上最大一轮管理干部裁撤
  7. c++ Templates读书笔记 9-12章
  8. NVIDIA Kepler GPUs Roadmap: GK107, GK106, GK104, GK110 and GK112
  9. 【数据结构】第二章课后练习题——线性结构
  10. Python 利用Cookies 登录新浪微博和豆瓣