从Excel VBA更新Word文档中的链接字段

时间:2013-08-28 09:34:36

标签: excel vba excel-vba ms-word word-vba

我试图通过将数据放入电子表格并链接到Word中的相应单元格,自动更新3个不同Word文档中的某些信息(例如名称,日期和数字)。电子表格中包含一些宏,可以在内部自动更新电子表格的各个部分。

除了更新Word文档中的链接外,一切正常。 通过右键单击Word并选择“更新链接”选项来尝试更新Word中的链接时,它会打开电子表格的宏警告对话框,询问我是否要激活宏。它不是只做一次,而是在20多岁左右不断更新过程(这对我来说似乎异常漫长)。因此更新链接有效,但前提是您愿意单击“激活宏”按钮几十次。

我尝试使用VBA自动更新Word中文档中的所有字段,但这也存在同样的问题,它还会持续显示Macros对话框半分钟。 这是我的代码:

Sub UpdateFields()
    ActiveDocument.Fields.Update
End Sub

我还尝试直接从电子表格更新Word文档,但这也不起作用,因为当Excel尝试通过VBA打开Word文档时,程序停止执行并拖出此错误:

“Excel正在等待另一个应用程序完成OLE操作。”

单击“确定”并等待无效,因为错误消息会在几秒钟后重新出现,并且阻止它的唯一方法是手动终止Excel进程。

这是我的Excel宏代码:

Sub LoopThroughFiles()
    Path = Application.ActiveWorkbook.Path
    Dim WordFile As String
    WordFile = Dir(Path & "\*.doc")
    Do While Len(WordFile) > 0
        Run Update(Path & "\" & WordFile)
        WordFile = Dir
    Loop
End Sub

Function Update(Filepath As String)

    Dim WordDoc As Word.Document
    Set WordApplication = CreateObject("Word.Application")
    Set WordDoc = WordApplication.Documents.Open(Filepath) 'This produces the error

    ActiveDocument.Fields.Update

End Function

请注意,文件夹中的唯一文件是3个文档和电子表格,程序确实找到了没有任何问题的文件。

我已经在网上搜索了解决方案,但我没有找到任何东西,我觉得这很奇怪,因为有人会对VBA做一件非常普遍的事情。 再说一遍,我对VBA的经验很少,所以我可能完全忽略了这一点,并且有一个我不知道的超级简单的解决方案。

1 个答案:

答案 0 :(得分:2)

我想我看到了错误,这是一个无声的失败,因为文件包含链接,有一个打开的对话框等着你说“是”或“否”更新链接。

我们可以通过禁用自动链接更新(WordApplication.Options.UpdateLinksAtOpen = False)来禁止此对话框。

Function Update(Filepath As String)
    Dim WordApplication As Word.Application
    Dim WordDoc As Word.Document
    Dim updateLinks As Boolean

    Set WordApplication = CreateObject("Word.Application")
        updateLinks = WordApplication.Options.UpdateLinksAtOpen 'capture the original value
        WordApplication.Options.UpdateLinksAtOpen = False      'temporarily disable

    Set WordDoc = WordApplication.Documents.Open(Filepath)
        WordDoc.Fields.Update
        'MsgBox "Links updated in " & WordDoc.Name
        '## Save and Close the Document
        WordDoc.Save
        WordDoc.Close

    '## reset the previous value and Quit the Word Application
    WordApplication.Options.UpdateLinksAtOpen = updateLinks             '
    WordApplication.Quit

End Function

另外,请记住保存并关闭文档,然后在函数内退出单词应用程序。

我做了另一个修改:

在您的函数中,ActiveDocument不是Excel中的对象,因此您需要对其进行限定,否则该行也会引发错误。我只是简单地引用您已分配的WordApplication.ActiveDocument,而不是引用WordDoc