word文档中删除超链接
时间:2010-01-12
来源:互联网
网上下了一批文档,其中有一些公式编辑器插入的公式都被加了超链接,手工删除超链接的话太繁琐,因此想到用VBA。
首先使用的代码是:
因此,我想到了hyperlink对象,写了如下的宏:
请问如何改进代码,提高效率。
附件见下面
高一数学必修4模块训练3.rar (68.37 KB)
首先使用的代码是:
复制内容到剪贴板
Dim oField As Field
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldHyperlink Then
oField.Unlink
End If
Next
Set oField = Nothing
End Sub
以上代码在网上流传甚广,但执行后所有的公式都成了图片,无法再次编辑。代码:
Sub RemoveHyperlinks()Dim oField As Field
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldHyperlink Then
oField.Unlink
End If
Next
Set oField = Nothing
End Sub
因此,我想到了hyperlink对象,写了如下的宏:
复制内容到剪贴板
Dim oHpLink As Hyperlink
For Each oHpLink In ActiveDocument.Hyperlinks
oHpLink.Delete
Next
End Sub
但每次执行这段代码,总有一些超链接无法删除,多次执行代码后,超链接好象可删除大部分。代码:
Sub RemoveHyperlinks2()Dim oHpLink As Hyperlink
For Each oHpLink In ActiveDocument.Hyperlinks
oHpLink.Delete
Next
End Sub
请问如何改进代码,提高效率。
附件见下面

作者: keypress 发布时间: 2010-01-12
目前想到的临时解决方案:
复制内容到剪贴板
Dim oHpLink As Hyperlink
Dim oNum, sNum As Integer
oNum = 0
sNum = ActiveDocument.Hyperlinks.Count
While ActiveDocument.Hyperlinks.Count > 0
For Each oHpLink In ActiveDocument.Hyperlinks
oHpLink.Delete
oNum = oNum + 1
Next
Wend
MsgBox "共有" & sNum & "个超链接" & Chr(13) & "一共转换了" & oNum & "个超链接"
End Sub
加上msgbox是为了监控转换的效率。 代码:
Sub RemoveHyperlinks2()Dim oHpLink As Hyperlink
Dim oNum, sNum As Integer
oNum = 0
sNum = ActiveDocument.Hyperlinks.Count
While ActiveDocument.Hyperlinks.Count > 0
For Each oHpLink In ActiveDocument.Hyperlinks
oHpLink.Delete
oNum = oNum + 1
Next
Wend
MsgBox "共有" & sNum & "个超链接" & Chr(13) & "一共转换了" & oNum & "个超链接"
End Sub
作者: keypress 发布时间: 2010-01-12
不用多次执行的方法:
Sub RemoveHyperlinks3()
Dim i As Integer
With ActiveDocument.Hyperlinks
For i = .Count To 1 Step -1
.Item(i).Delete
Next
End With
End Sub
说明:你可以把Hyperlinks集合想象成一个队列,用FOR EACH 循环时,从头到尾访问一遍。你如果执行删除第一个,队列中少了1个,队列中的第二个则变为第一个,在next时是按队列序号向下跳1个,可是现在又被删除的其实是原来的第三个,所以执行一遍还有一半儿没有删除。
我用的方法是从最后一个向前删除,就不会出现这个问题。
Sub RemoveHyperlinks3()
Dim i As Integer
With ActiveDocument.Hyperlinks
For i = .Count To 1 Step -1
.Item(i).Delete
Next
End With
End Sub
说明:你可以把Hyperlinks集合想象成一个队列,用FOR EACH 循环时,从头到尾访问一遍。你如果执行删除第一个,队列中少了1个,队列中的第二个则变为第一个,在next时是按队列序号向下跳1个,可是现在又被删除的其实是原来的第三个,所以执行一遍还有一半儿没有删除。
我用的方法是从最后一个向前删除,就不会出现这个问题。
作者: csnAlex 发布时间: 2010-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28