伊恩(Ian)有很多文档,其中包括到其他文档的链接。

(这些不是超链接;它们是Word中的实际文档链接。)他需要断开这些链接,并且他知道自己可以加载文档并逐个断开链接。但是,他想知道是否有可用的宏可以遍历文件夹中的所有文档并自动断开这些文档中的所有链接。

您可以按照以下步骤手动断开链接:

。单击功能区的“文件”选项卡。

。确保在屏幕左侧选择了信息。

。在屏幕的右下角,在“相关文档”类别下,单击“编辑文件链接”。 (如果此选项不可用,则意味着Word认为当前文档中没有任何链接。)Word显示“链接”对话框。 (请参见图1。)

。选择您要断开的链接。

。单击断开链接。要求您确认您的操作。

。单击确定。

如果使用的是Word 2007,则步骤会有所不同:

。单击Office按钮,然后单击准备。

。单击编辑链接到文件。 (如果此选项不可用,则意味着Word认为当前文档中没有任何链接。)

Word将显示“链接”对话框。

。选择您要断开的链接。

。单击断开链接。要求您确认您的操作。

。单击确定。

如您所知,此过程非常耗费人力,尤其是当您有很多文档并且每个文档都有多个链接时。该过程的劳动密集型性质是为什么Ian寻求在宏的控制下断开链接的方法。

为了在宏中执行此操作,宏需要打开文件夹中的每个文档,断开其找到的所有链接,然后保存该文档。

弄清楚一个文件夹中有多少个文档,然后打开并关闭它们非常简单。如果要断开链接,则宏需要浏览文档中的每个字段,并仅断开那些使用LINK字段的字段。下面的宏显示了如何完成此操作。

Sub RemoveLinks()

Dim fleArray() As String     Dim flCount As Long     Dim k As Long     Dim fle As String     Dim fld As Field     Dim currentFileName As String     Dim docPath As String     Dim bDirty As Boolean

docPath = ActiveDocument.Path & "\"

currentFileName = ActiveDocument.Name

fle = Dir(docPath & "doc")

flCount = -1     ReDim fleArray(0)

Do While fle <> ""

flCount = flCount + 1         ReDim Preserve fleArray(flCount)

fleArray(flCount) = fle         fle = Dir()

Loop

If MsgBox("There are " & flCount + 1 & " files to be processed." _       & vbCrLf & "Do you want to continue?", vbYesNo, "Break links") _       = vbNo Then Exit Sub

For k = 0 To UBound(fleArray)

fle = fleArray(k)

Options.UpdateLinksAtOpen = False         Documents.Open FileName:=docPath & fle         Options.UpdateLinksAtOpen = True         bDirty = False         For Each fld In ActiveDocument.Fields             If fld.Type = wdFieldLink Then                 ' Uncomment the following if link needs to be updated                 ' before the link is broken                 ' fld.LinkFormat.Update                 fld.LinkFormat.BreakLink                 bDirty = True             End If         Next fld         If bDirty Then ActiveDocument.Save    ' Only save if links broken         If ActiveDocument.Name <> currentFileName Then ActiveDocument.Close     Next k End Sub

注意,For Each循环查看Fields集合中的每个字段(fld)。它检查以确保该字段的Type属性等于wdFieldLink,这意味着它是一个LINK字段。如果是这样,代码将BreakLink方法与该字段的LinkFormat属性一起使用,从而有效地删除了链接。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)上描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(2357)适用于Microsoft Word 2007、2010、2013和2016。