如何用vba调用word的定位功能快速地定位具体的内容区域?

如下图所示

在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
       

发表评论