5

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

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

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

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 的经验很少,所以我可能完全忽略了这一点,并且有一个我不知道的超级简单的解决方案。

4

1 回答 1

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

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

我做了另一个修改:

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

于 2013-08-28T14:56:08.813 回答