Следующий макрос будет обрабатывать как сноски, так и концевые сноски, генерируя гиперссылки для каждой из них, в том числе для перекрестных ссылок сноски / концевой сноски. Лучше всего запускать макрос только после того, как вы закончите редактирование. Обратите внимание, что исходные сноски и ссылки на концевые сноски не удаляются - они просто преобразуются в скрытый текст.
Sub HyperlinkEndNotesFootNotes()
Dim SBar As Boolean ' Status Bar flag
Dim TrkStatus As Boolean ' Track Changes flag
Dim Rng1 As Range, Rng2 As Range, i As Long
' Store current Status Bar status, then switch on
SBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
' Store current Track Changes status, then switch off
With ActiveDocument
TrkStatus = .TrackRevisions
.TrackRevisions = False
End With
' Turn Off Screen Updating
Application.ScreenUpdating = False
With ActiveDocument
'Process all endnotes
For i = 1 To .Endnotes.Count
'Give the OS a chance to do any background processing
DoEvents
'Update the statusbar
StatusBar = "Processing Endnote " & i
'Define two ranges: one to the endnote reference the other to the endnote content
Set Rng1 = .Endnotes(i).Reference
Set Rng2 = .Endnotes(i).Range.Paragraphs.First.Range
With Rng1
'Format the endnote reference as hidden text
.Font.Hidden = True
'Insert a number before the endnote reference and bookmark it
.Collapse wdCollapseStart
.Text = i
.Style = "Endnote Reference"
.Bookmarks.Add Name:="_ERef" & i, Range:=Rng1
End With
'Insert a number before the endnote content and bookmark it
With Rng2
'Format the endnote reference as hidden text
With .Words.First
If .Characters.Last Like "[ " & vbTab & "]" Then .End = .End - 1
.Font.Hidden = True
End With
'Insert a number before the endnote reference and bookmark it
.Collapse wdCollapseStart
.Text = i
.Style = " Endnote Reference"
.Bookmarks.Add Name:="_ENum" & i, Range:=Rng2
End With
'Insert hyperlinks between the endnote references
.Hyperlinks.Add Anchor:=Rng1, SubAddress:="_ENum" & i
.Hyperlinks.Add Anchor:=Rng2, SubAddress:="_ERef" & i
'Restore the Rng1 endnote reference bookmark
.Bookmarks.Add Name:="_ERef" & i, Range:=Rng1
Next
'Process all footnotes
For i = 1 To .Footnotes.Count
'Give the OS a chance to do any background processing
DoEvents
'Update the statusbar
StatusBar = "Processing Footnote " & i
'Define two ranges: one to the footnote reference the other to the footnote content
Set Rng1 = .Footnotes(i).Reference
Set Rng2 = .Footnotes(i).Range.Paragraphs.First.Range
With Rng1
'Format the footnote reference as hidden text
.Font.Hidden = True
'Insert a number before the footnote reference and bookmark it
.Collapse wdCollapseStart
.Text = i
.Style = "Footnote Reference"
.Bookmarks.Add Name:="_FRef" & i, Range:=Rng1
End With
'Insert a number before the footnote content and bookmark it
With Rng2
'Format the footnote reference as hidden text
With .Words.First
If .Characters.Last Like "[ " & vbTab & "]" Then .End = .End - 1
.Font.Hidden = True
End With
'Insert a number before the footnote reference and bookmark it
.Collapse wdCollapseStart
.Text = i
.Style = " Footnote Reference"
.Bookmarks.Add Name:="_FNum" & i, Range:=Rng2
End With
'Insert hyperlinks between the footnote references
.Hyperlinks.Add Anchor:=Rng1, SubAddress:="_FNum" & i
.Hyperlinks.Add Anchor:=Rng2, SubAddress:="_FRef" & i
'Restore the Rng1 footnote reference bookmark
.Bookmarks.Add Name:="_FRef" & i, Range:=Rng1
Next
'Update the statusbar
StatusBar = "Finished Processing " & .Endnotes.Count & " Endnotes" & .Footnotes.Count & " Footnotes"
End With
Call HLnkNoteRefs
Set Rng1 = Nothing: Set Rng2 = Nothing
' Restore original Status Bar status
Application.DisplayStatusBar = SBar
' Restore original Track Changes status
ActiveDocument.TrackRevisions = TrkStatus
' Restore Screen Updating
Application.ScreenUpdating = True
End Sub
Sub HLnkNoteRefs()
Dim Fld As Field, StrTgt As String, Rng As Range, StrRef As String
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
For Each Fld In ActiveDocument.Fields
With Fld
If .Type = wdFieldNoteRef Then
StrTgt = ActiveDocument.Bookmarks(Split(Trim(.Code), " ")(1)).Range.Characters.First.Hyperlinks(1).SubAddress
StrRef = .Result
Set Rng = .Code
With Rng
While .Fields.Count = 0
.Start = .Start - 1
Wend
.Collapse wdCollapseStart
.Hyperlinks.Add Anchor:=Rng, SubAddress:=StrTgt, TextToDisplay:=StrRef
.End = .End + 1
.Hyperlinks(1).Range.Font.Superscript = True
End With
.Result.Font.Hidden = True
End If
End With
Next
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub