繁体   English   中英

如何使用 Excel VBA 引用 MS Word 目录页码?

[英]How to reference MS Word table of contents page numbers with Excel VBA?

我试图在某些 VBA 代码中使用 Word 中目录对象右侧的页码。 我可以使用GetCrossReferenceItems(wdRefTypeHeading)访问存储与这些页码关联的文本的数组,但似乎无法获取页码本身。 此处列出的 GetCrossReferenceItems 常量似乎都不相关。

在此处输入图片说明

有没有办法引用这些页码? 谢谢!

我不是“Worder”,所以这就是我想到的:

Function GetPagesNumber(doc As Document) As Long()
    Dim i As Long
    Dim myRng As Range
    Dim myHeadings As Variant

    With doc
        Set myRng = .Content
        myRng.Collapse Direction:=wdCollapseEnd

        myHeadings = .GetCrossReferenceItems(wdRefTypeHeading)
        ReDim pages(1 To UBound(myHeadings)) As Long
        For i = 1 To UBound(myHeadings)
            myRng.InsertCrossReference ReferenceType:=wdRefTypeHeading, ReferenceKind:=wdPageNumber, ReferenceItem:=i
            With .Paragraphs(ActiveDocument.Paragraphs.count).Range
                myRng.SetRange Start:=.Start, End:=.End - 1
            End With
            pages(i) = CLng(myRng.Text)
        Next i
    End With
    myRng.Delete
    GetPagesNumber = pages
End Function

使用如下:

Option Explicit
Sub main()
    Dim myPagesNumber() As Long

    myPagesNumber = GetPagesNumber(ActiveDocument) '<-- store index pages numbers in myPagesNumber 
End Sub

而不是使用;

myHeadings = .GetCrossReferenceItems(wdRefTypeHeading)

你也可以使用;

Dim myField As Field
Set myField = ActiveDocument.TablesOfContents(1).Range.Fields(1)
myHeadings = Split(myField.Result.Text, Chr(13))

这将返回一个字符串数组,数组的最后一个字符是标题的页码 使用pgnr = CInt(Right(myHeadings (i), Len(myHeadings (i)) - InStrRev(myHeadings (i), Chr(9))))获取页码。

更好的是首先将myHeadings拆分为以Chr(13)作为分隔符的行然后以Chr(9)作为分隔符拆分为列。

所以整个目录在一个数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM