标签:Word VBA
通常,当我们在文档中键入超链接形式的文字并按回车键时,Word会自动识别并添加超链接。当然,你可以设置Word选项来阻止自动转换功能。具体设置方法如下:
单击“文件——选项”,在出现的“Word选项”窗口中选择左侧的“校对”选项卡,在右侧单击“自动更正选项按钮”,在出现的“自动更正”窗口中选择“键入时自动套用格式”,取消勾选其中的“Internet及网络路径替换为超链接”前的复选框。如下图1所示。
图1
然而,对于文档中已经存在的超链接,则还需要逐个取消。此时,如果想要将文档中所有已有的超链接转换为普通文本,即取消其超链接,可以使用下面的代码:
Sub RemoveHyperlinks()
Dim objHyperlink As Hyperlink
Dim i As Long
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1
ActiveDocument.Hyperlinks(i).Delete
Next i
End Sub
注意,这里没有使用For Each循环,原因是许多Word集合(包括超链接集合)都存在Bug,它可能不会遍历集合中所有项。
上面的代码运行得很好,但如果定义了超链接具体的字符样式,则在运行上述代码后,格式仍会保留。如果想在取消超链接的同时也删除其格式,则可以使用下面的代码:
Sub RemoveHyperlinksAndFormat()
Dim objHyperlink As Hyperlink
Dim i As Long
Dim rngRange As Range
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1
With ActiveDocument.Hyperlinks(i)
Set rngRange = .Range
.Delete
rngRange.Font.Reset
End With
Next i
End Sub
如果希望删除超链接,但仍然使用超链接字符样式格式化文本,可以使用下面的代码:
Sub RemoveHyperlinksButPreserveStyle()
Dim objHyperlink As Hyperlink
Dim i As Long
Dim rngRange As Range
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1
With ActiveDocument.Hyperlinks(i)
Set rngRange = .Range
.Delete
rngRange.Style = wdStyleHyperlink
End With
Next i
End Sub
此外,上述代码存在一个问题:如果文档中存在目录,那么运行上述代码后,目录中文本的超链接会被取消,但页码的超链接仍保留。为了避免这种情况,可以使用下面的代码:
Sub RemoveHyperlinksExceptToc()
Dim objHyperlink As Hyperlink
Dim i As Long
Dim rngRange As Range
Dim objToc As TableOfContents
Dim LinkIsToc As Boolean
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1
With ActiveDocument.Hyperlinks(i)
Set rngRange = .Range
LinkIsToc = False
For Each objToc In ActiveDocument.TablesOfContents
If rngRange.InRange(objToc.Range) Then
LinkIsToc = True
Exit For
End If
Next objToc
If Not LinkIsToc Then
.Delete
rngRange.Font.Reset
'rngRange.Style = wdStyleHyperlink
End If
End With
Next i
End Sub
注:近期的一系列Word VBA文章,是自己边学习边分享的,有用无用看个人,希望大家不要发表一些不好的评论,这些评论我不会通过的!