如下图所示

在word中可以用“定位”功能快速地定位到具体的页、节、行、书签、批注、脚注、尾注、域、表格、图形、公式、对象、标题等。
在vba中可以使用Document、Range、Selection对象的GoTo方法实现上图中的定位功能,它的语法如下:
expression .GoTo(What, Which, Count, Name)
其中what参数表示要定位的对象,可以有如下值:
| Name | Value | Description |
| wdGoToBookmark | -1 | 书签 |
| wdGoToComment | 6 | 批注 |
| wdGoToEndnote | 5 | 尾注 |
| wdGoToEquation | 10 | 公式 |
| wdGoToField | 7 | 域 |
| wdGoToFootnote | 4 | 脚注 |
| wdGoToGrammaticalError | 14 | 语法错误 |
| wdGoToGraphic | 8 | 图片 |
| wdGoToHeading | 11 | 标题 |
| wdGoToLine | 3 | 行 |
| wdGoToObject | 9 | 对象 |
| wdGoToPage | 1 | 页 |
| wdGoToPercent | 12 | 比例 |
| wdGoToProofreadingError | 15 | 校验错误 |
| wdGoToSection | 0 | 节 |
| wdGoToSpellingError | 13 | 拼写错误 |
| wdGoToTable | 2 | 表格 |
Which参数表示要使用的定位方式,是绝对位置还是相对位置,可以有如下的值:
| Name | Value | Description |
| wdGoToAbsolute | 1 | 使用绝对位置 |
| wdGoToFirst | 1 | 第一个 |
| wdGoToLast | -1 | 最后一个 |
| wdGoToNext | 2 | 下一个 |
| wdGoToPrevious | 3 | 上一个 |
| wdGoToRelative | 2 | 相对于当前的位置 |
Count参数表示要移动的数量,Name参数表示具体的对象的名称。
特别注意的是,Document、Range、Selection对象的GoTo方法定位的结果是将光标移至该对象的起始位置,返回的是Range对象。
如下代码用Document、Range、Selection对象的GoTo方法遍历word文档中的每一页:
Sub QQ1722187970()
Const wdActiveEndPageNumber = 3
Const wdGoToHeading = 11
Const wdGoToAbsolute = 1
Const wdGoToPage = 1
Dim oDoc As Document
Dim oWord As Word.Application
Set oWord = Word.Application
Set oDoc = oWord.ActiveDocument
Dim oRng As Range
With oDoc
iMin = -1
I = 1
Do
'循环每页
Set oRng = .GoTo(wdGoToPage, wdGoToAbsolute, I)
'如果到底或者回到头则退出循环
If oRng.Start < iMin Or oRng.Start = iMin Then Exit Do
Debug.Print oRng.Start, oRng.End
iMin = oRng.Start
I = I + 1
Loop Until 1 <> 1
End With
End Sub


发表评论