[英]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.