|
|
|
 |
How to convert the hyperlinks in a document to plain text
|
Or: How to prevent URLs from being converted to hyperlinks while I type
Article contributed by Dave Rado,
with acknowledgements to Ibby and
Jonathan West
If you want to prevent urls being converted to hyperlinks as you type them,
select Tools + Autocorrect + Autoformat As You Type, and under Replace
as you type, turn off Internet
and network paths with hyperlinks.
If you want to convert all existing hyperlinks in a document into plain text, you could run
the following macro:
Sub GetRidOfHlinks()
Dim oHlink As Hyperlink,
i As Long
For i = ActiveDocument.Hyperlinks.Count To
1 Step -1
ActiveDocument.Hyperlinks(i).Delete
Next i
End Sub
This does not delete the text, it just converts the hyperlink fields
to plain text.
The reason that a For Each loop can't be used is that many Word collections,
including the Hyperlinks collection, are buggy; if you delete a member of the
collection using a For Each loop, Word loses track, and as a result, only every
second hyperlink gets deleted if you use For Each. And you have to count from
the top to the bottom of the collection, as shown, or Word will lose track.
The above code always works well in Word 97, but unfortunately, in Word 2000,
if your Hyperlink character style is defined to have bold formatting, you will
end up with manual bold formatting applied to your URLs after running the code
(another bug). To get round that, you could use the following variation instead,
which always works, in Word 97 and above:
Sub GetRidOfHlinksWithoutApplyingBold()
Dim oHlink As Hyperlink,
i As Long, MyRange As Range
For i = ActiveDocument.Hyperlinks.Count To
1 Step -1
With ActiveDocument.Hyperlinks(i)
Set MyRange =
.Range
.Delete
MyRange.Font.Reset
End With
Next i
End Sub
On the other hand, if you want to remove the hyperlink fields but still have
the text of the URLs formatted with the Hyperlink character style, you could use
the following variation on the same theme:
Sub GetRidOfHlinksButPreserveCharacterStyle()
Dim oHlink As Hyperlink,
i As Long, MyRange As Range
For i = ActiveDocument.Hyperlinks.Count To
1 Step -1
With ActiveDocument.Hyperlinks(i)
Set MyRange =
.Range
.Delete
MyRange.Style = wdStyleHyperlink
End With
Next i
End Sub
Preserving hyperlinks within your Table of Contents
In Word 2000 and above, if your table of contents contains the /h switch (in
other words, if the text in the Table of Contents – not only the page numbers
– hyperlinks to your headings), the above code will remove those text hyperlinks as
well (although they will be automatically regenerated when you next update the
table of contents). That is, it won't unlink the Table of Contents, and the page
numbers will still hyperlink to the headings, but the text in the TOC won't
hyperlink to the Headings after running the above code.
To prevent that from happening, you could use the following
code instead: Sub GetRidOfHlinksExceptInToc()
Dim oHlink As Hyperlink,
i As Long, MyRange As Range,
_
oToc As TableOfContents, LinkIsInToc As
Boolean
For i = ActiveDocument.Hyperlinks.Count To
1 Step -1
With
ActiveDocument.Hyperlinks(i)
Set
MyRange = .Range
LinkIsInToc = False
For Each
oToc In ActiveDocument.TablesOfContents
If
MyRange.InRange(oToc.Range) Then
LinkIsInToc = True
Exit For
End
If
Next oToc
If Not LinkIsInToc
Then
.Delete
MyRange.Font.Reset
'or use MyRange.Style = wdStyleHyperlink if you prefer
End If
End With
Next i
End Sub
As an aside, if you have no other fields in the document, you can
convert all the hyperlinks to plain text manually by Selecting All and pressing Ctrl+Shift+F9
(unlink fields). That's a big “if”,
though, and it's a risk I'd rather not take. The above macros do run very fast.
|