簡體   English   中英

VBA將參考頁插入MS word endnote

[英]VBA to insert reference page into MS word endnote

預訂尾注經常放棄頁碼的上標數字。 例如,而不是

Abe Lincoln was assassinated with a pistol.^33
                   :
33. A single-shot derringer pistol.

幾位作者撰寫的書籍

Abe Lincoln was assassinated with a pistol.
                   :
Page 297. Abe Lincoln was shot single-shot derringer pistol.

Word沒有此功能,所以我認為它必須是一個宏。 我想出了下面的簡單代碼,循環遍歷所有尾注並添加

"Page ???. "

在每個尾注之前,但是什么“???” 需要將我的稿件中的頁碼正確插入引文所在的位置?

Sub RedefineExistingEndNotes()
    Dim fn As Endnote
    For Each fn In ActiveDocument.Endnotes
        fn.Range.Paragraphs(1).Range.Font.Reset
        fn.Range.Paragraphs(1).Range.Characters(1).InsertBefore "Page" & "???" & " - "
    Next fn
End Sub

嘗試以下VBA代碼:

Sub InsertPageNumberForEndnotes()

Dim endNoteCount As Integer
Dim curPageNumber As Integer

If ActiveDocument.Endnotes.Count > 0 Then

For endNoteCount = 1 To ActiveDocument.Endnotes.Count

Selection.GoTo What:=wdGoToEndnote, Which:=wdGoToAbsolute, Count:=endNoteCount
curPageNumber = Selection.Information(wdActiveEndPageNumber)
ActiveDocument.Endnotes(endNoteCount).Range.Select
ActiveDocument.Application.Selection.Collapse (WdCollapseDirection.wdCollapseStart)
ActiveDocument.Application.Selection.Paragraphs(1).Range.Characters(1).InsertBefore "Page " & CStr(curPageNumber) & " - "


Next
End If

End Sub

另一種方法可能是使用PAGEREF字段並隱藏尾注引用,例如

Sub modifyEndNotes()
Const bookmarkText As String = "endnote"
Dim en As Word.Endnote
Dim rng As Word.Range
For Each en In ActiveDocument.Endnotes
  en.Reference.Bookmarks.Add bookmarkText & en.Index
  en.Reference.Font.Hidden = True
  Set rng = en.Range
  rng.Paragraphs(1).Range.Font.Hidden = True
  rng.Collapse WdCollapseDirection.wdCollapseStart
  rng.Text = "Page . "
  rng.SetRange rng.End - 2, rng.End - 2
  rng.Fields.Add rng, WdFieldType.wdFieldEmpty, "PAGEREF " & bookmarkText & en.Index & " \h", False
  'if necessary...
  'rng.Fields.Update
  en.Range.Font.Hidden = False
Next
Set rng = Nothing
End Sub

對於第二次運行,您需要刪除並重新插入已添加的文本和字段。

不幸的是,進一步的觀察表明,如果不是不可能的話,隱藏尾注(在尾注本身中)而不將段落標記隱藏在第一個尾注段的末尾是很困難的,這意味着所有尾注都將結束看起來像一個凌亂的筆記。 所以我刪除了這個答案。

然而,OP認為這種方法可以用一種有用的方式進行修改,所以我沒有刪除。 我無法立即重新研究它,但有些可能性可能是用子彈(如OP所建議的)替換每個尾注標記,或者甚至可能是像空格或“ - ”那樣簡單的東西。

例如,像這樣的東西(它也使用不同的技術隱藏引用)......

Sub modifyEndNotes2()
' this version also formats the endnotes under page headings
Const bookmarkText As String = "endnote"
Dim en As Word.Endnote
Dim f As Word.Field
Dim i As Integer
Dim rng As Word.Range
Dim strSavedPage As String
strSavedPage = ""
For Each en In ActiveDocument.Endnotes
  en.Reference.Bookmarks.Add bookmarkText & en.Index
  Set rng = en.Range
  rng.Collapse WdCollapseDirection.wdCollapseStart
  If CStr(en.Reference.Information(wdActiveEndPageNumber)) <> strSavedPage Then
    strSavedPage = CStr(en.Reference.Information(wdActiveEndPageNumber))
    rng.Text = "Page :-" & vbCr & " - "
    rng.SetRange rng.End - 6, rng.End - 6
    rng.Fields.Add rng, WdFieldType.wdFieldEmpty, "PAGEREF " & bookmarkText & en.Index & " \h", False
    rng.Collapse WdCollapseDirection.wdCollapseEnd
  Else
    rng.Text = "- "
  End If
Next
If ActiveDocument.Endnotes.Count > 1 Then
  ActiveDocument.Styles(wdStyleEndnoteReference).Font.Hidden = True
Else
  ActiveDocument.Styles(wdStyleEndnoteReference).Font.Hidden = False
End If
Set rng = Nothing
End Sub

在上面的例子中,請注意每個頁面只有一個鏈接,可能需要格式化以顯示它是一個鏈接,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM