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

我试图通过将数据放入电子表格并链接到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的经验很少,所以我可能完全忽略了这一点,并且有一个我不知道的超级简单的解决方案.

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

我们可以通过禁用自动链接更新来禁止此对话框(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中的对象,因此您需要对其进行限定,否则该行也将引发错误.我只是简单地引用您已经分配的WordDoc,而不是引用WordApplication.ActiveDocument.

点赞