【问题标题】:How to reference MS Word table of contents page numbers with Excel VBA?如何使用 Excel VBA 引用 MS Word 目录页码?
【发布时间】:2020-04-17 19:33:36
【问题描述】:

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

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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    我不是“言辞者”,所以这是我想出的:

    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
    

    【讨论】:

    • @superfluous,你通过了吗?
    【解决方案2】:

    而不是使用;

    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)为分隔符的列。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多