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

时间:2016-10-13 22:18:24

标签: vba word-vba

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

enter image description here

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

代替使用;

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

所以整个目录都是一个数组。