+ -
当前位置:首页 → 问答吧 → word文档中删除超链接

word文档中删除超链接

时间:2010-01-12

来源:互联网

网上下了一批文档,其中有一些公式编辑器插入的公式都被加了超链接,手工删除超链接的话太繁琐,因此想到用VBA。
首先使用的代码是:
复制内容到剪贴板
代码:
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对象,写了如下的宏:
复制内容到剪贴板
代码:
Sub RemoveHyperlinks2()
    Dim oHpLink As Hyperlink
   For Each oHpLink In ActiveDocument.Hyperlinks
        oHpLink.Delete
   Next
End Sub
但每次执行这段代码,总有一些超链接无法删除,多次执行代码后,超链接好象可删除大部分。
请问如何改进代码,提高效率。
附件见下面 高一数学必修4模块训练3.rar (68.37 KB)
高一数学必修4模块训练3.rar (68.37 KB)
下载次数: 6
2010-1-12 18:24

作者: keypress   发布时间: 2010-01-12

目前想到的临时解决方案:
复制内容到剪贴板
代码:
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
加上msgbox是为了监控转换的效率。

作者: 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个,可是现在又被删除的其实是原来的第三个,所以执行一遍还有一半儿没有删除。

我用的方法是从最后一个向前删除,就不会出现这个问题。

作者: csnAlex   发布时间: 2010-12-23