![]() |
|
#1
|
|||
|
|||
|
Hello All. My first post here. My question is behalf of someone else who is at their wits end with a problem with endnote hyperlinks. She has done this in previous similar documents (a quarterly Journal of articles), but the usual method is failing her. She makes a endnote hyperlink to the footnote, and it works fine. Clicking on the link takes you to the endnote at the end of the particular article, and the back arrow returns you to the text. However, you can only do that once. If you try it again, the hyperlink is gone--nothing happens, it's black and not blue. Any suggestions? We are using Word 2013 with Windows 8.1. Thank you. |
|
#2
|
||||
|
||||
|
Since endnote references in Word automatically hyperlink to the endnotes without the addition of hyperlinks, I'm not sure what the point of adding hyperlinks is.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
The Word document will ultimately be the source for a MOBI ebook file. Does that make sense of the question then?
|
|
#4
|
||||
|
||||
|
The following macro replicates the endnote & footnote references (which become hidden text) with bookmarked hyperlinks. The second macro (KillEndNoteFootNoteHyperLinks) reverses the process.
Word's Note References always point to the reference in the body of the document, not to the endnote or footnote itself. The following HyperlinkEndNotesFootNotes macro doesn't change that behaviour. To have the Note References hyperlink to the actual endnote or footnote you could use the third macro (HLnkNoteRefs). The fourth macro (KillHLnkNoteRefs) reverses the process Code:
Sub HyperlinkEndNotesFootNotes()
Dim SBar As Boolean ' Status Bar flag
Dim TrkStatus As Boolean ' Track Changes flag
Dim Rng1 As Range, Rng2 As Range, StrRef As String, 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
'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
'To get the actual reference text, we need to cross-reference it!
.InsertCrossReference wdRefTypeEndnote, wdEndnoteNumber, i, False, False
.End = .End + 1
StrRef = .Fields(1).Result
.Fields(1).Delete
.Text = StrRef
.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 = StrRef
.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
'Give Word a chance to do its housekeeping
DoEvents
'Process all footnotes
For i = 1 To .Footnotes.Count
'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
'To get the actual reference text, we need to cross-reference it!
.InsertCrossReference wdRefTypeFootnote, wdFootnoteNumber, i, False, False
.End = .End + 1
StrRef = .Fields(1).Result
.Fields(1).Delete
.Text = StrRef
.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 = StrRef
.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
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
Code:
Sub KillEndNoteFootNoteHyperLinks()
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
'Delete endnote/footnote hyperlinks from the MainStory
For i = .Hyperlinks.Count To 1 Step -1
With .Hyperlinks(i)
StatusBar = "Processing Hyperlink " & i
If .SubAddress Like "_ENum*" Then
.Range.Delete
ElseIf .SubAddress Like "_FNum*" Then
.Range.Delete
End If
End With
Next i
'Delete endnote hyperlinks from the EndnotesStory
If .Endnotes.Count > 0 Then
With .StoryRanges(wdEndnotesStory)
For i = .Hyperlinks.Count To 1 Step -1
StatusBar = "Processing Endnote Hyperlink " & i
With .Hyperlinks(i)
If .SubAddress Like "_ERef*" Then .Range.Delete
End With
Next i
End With
End If
'Delete footnote hyperlinks from the FootnotesStory
If .Footnotes.Count > 0 Then
With .StoryRanges(wdFootnotesStory)
For i = .Hyperlinks.Count To 1 Step -1
StatusBar = "Processing Footnote Hyperlink " & i
With .Hyperlinks(i)
If .SubAddress Like "_FRef*" Then .Range.Delete
End With
Next i
End With
End If
'Process all endnotes
For i = 1 To .Endnotes.Count
'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
'Format the endnote reference as visible text
Rng1.Font.Hidden = False
Rng2.Words.First.Font.Hidden = False
Next
'Process all footnotes
For i = 1 To .Footnotes.Count
'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
'Format the footnote reference as visible text
Rng1.Font.Hidden = False
Rng2.Words.First.Font.Hidden = False
Next
'Update the statusbar
StatusBar = "Finished Processing " & .Endnotes.Count & " Endnotes" & .Footnotes.Count & " Footnotes"
End With
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
Code:
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
Call HLnkNoteRefs after the final: End With in the HyperLinkEndNoteFootNotes macro. Code:
Sub KillHLnkNoteRefs()
Dim Fld As Field
For Each Fld In ActiveDocument.Fields
With Fld
If .Type = wdFieldNoteRef Then
.Result.Font.Hidden = False
End If
End With
Next
End Sub
Call KillHLnkNoteRefs after the final: End With in the KillEndNoteFootNoteHyperLinks macro.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
|||
|
|||
|
Thank you very much. I will pass this on, being just a middleman myself. We are beginning to think it was misunderstanding the function of what I would call an 'undo' arrow.
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Convert .DOC to PDF and retain endnote links? | WaltR | Word | 13 | 08-19-2015 06:21 AM |
| Big presentation, links fail: solution | theredspecial | PowerPoint | 6 | 08-26-2013 10:35 PM |
links don't work
|
yourforester | Outlook | 1 | 08-19-2013 09:42 AM |
| endnote and import reference from word to endnote | uncung | Word | 0 | 06-18-2011 08:09 AM |
| Duration changes fail to update work effort | Panteledes | Project | 6 | 05-25-2010 02:27 PM |