#1
|
|||
|
|||
Endnote links only work once then fail.
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 |