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

som*_*guy 5 excel vba ms-word

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

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

我尝试使用 VBA 自动更新 Word 文档中的所有字段,但这也有同样的问题,它还会不断弹出“宏”对话框半分钟。这是我的代码:

Sub UpdateFields()
    ActiveDocument.Fields.Update
End Sub
Run Code Online (Sandbox Code Playgroud)

我还尝试直接从电子表格更新 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
Run Code Online (Sandbox Code Playgroud)

请注意,该文件夹中唯一的文件是 3 个文档和电子表格,并且程序确实可以毫无问题地找到这些文件。

我在网上搜索了解决方案,但没有真正找到任何东西,我觉得这很奇怪,因为这似乎是有人用 VBA 做的很常见的事情。话又说回来,我对 VBA 的经验很少,所以我可能完全没有抓住重点,而且有一个我只是不知道的超级简单的解决方案。

Dav*_*ens 3

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

我们可以通过禁用自动链接更新来抑制此对话框 ( 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
Run Code Online (Sandbox Code Playgroud)

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

我做了另一个修改:

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