前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Word VBA技术:将文档中的超链接转换为普通文本(取消超链接)

Word VBA技术:将文档中的超链接转换为普通文本(取消超链接)

作者头像
fanjy
发布2023-02-24 20:25:15
2.9K0
发布2023-02-24 20:25:15
举报
文章被收录于专栏:完美Excel

标签:Word VBA

通常,当我们在文档中键入超链接形式的文字并按回车键时,Word会自动识别并添加超链接。当然,你可以设置Word选项来阻止自动转换功能。具体设置方法如下:

单击“文件——选项”,在出现的“Word选项”窗口中选择左侧的“校对”选项卡,在右侧单击“自动更正选项按钮”,在出现的“自动更正”窗口中选择“键入时自动套用格式”,取消勾选其中的“Internet及网络路径替换为超链接”前的复选框。如下图1所示。

图1

然而,对于文档中已经存在的超链接,则还需要逐个取消。此时,如果想要将文档中所有已有的超链接转换为普通文本,即取消其超链接,可以使用下面的代码:

代码语言:javascript
复制
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,它可能不会遍历集合中所有项。

上面的代码运行得很好,但如果定义了超链接具体的字符样式,则在运行上述代码后,格式仍会保留。如果想在取消超链接的同时也删除其格式,则可以使用下面的代码:

代码语言:javascript
复制
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

如果希望删除超链接,但仍然使用超链接字符样式格式化文本,可以使用下面的代码:

代码语言:javascript
复制
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

此外,上述代码存在一个问题:如果文档中存在目录,那么运行上述代码后,目录中文本的超链接会被取消,但页码的超链接仍保留。为了避免这种情况,可以使用下面的代码:

代码语言:javascript
复制
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文章,是自己边学习边分享的,有用无用看个人,希望大家不要发表一些不好的评论,这些评论我不会通过的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档