首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Excel VBA更新Word文档中的链接字段

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

Stack Overflow用户
提问于 2013-08-28 17:34:36
回答 1查看 23.9K关注 0票数 5

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

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

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

代码语言:javascript
运行
复制
Sub UpdateFields()
    ActiveDocument.Fields.Update
End Sub

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

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

单击“确定”并等待不会有任何帮助,因为错误消息会在几秒钟后重新出现,而要停止该错误消息,唯一的方法是手动终止Excel进程。

下面是我的Excel宏代码:

代码语言:javascript
运行
复制
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的经验,所以我可能完全忽略了这一点,并且有一个超级简单的解决方案我只是不知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-28 22:56:09

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

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

代码语言:javascript
运行
复制
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

此外,请记住保存并关闭文档,然后在函数中退出word应用程序。

我做了另一个修改:

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18484268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档