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

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

除了更新Word文档中的链接外,一切工作都正常。 当试图更新Word中的链接并右键单击它并select“更新链接”选项时,它将popup电子表格的“macros警告”对话框,询问是否要激活macros。 它不是只做一次,而是在20多年左右不断更新的过程中(这对我来说似乎非常长)。 因此,更新链接的工作,但只有当你愿意点击几十次“激活macros”button。

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

Sub UpdateFields() ActiveDocument.Fields.Update End Sub 

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

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

单击确定并等待不起作用,因为几秒钟后会再次出现错误消息,停止它的唯一方法是手动终止Excel进程。

这是我的Excelmacros代码:

 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个文档和电子表格,程序确实可以find没有任何问题的文件。

我在网上search了解决scheme,但是我没有find任何东西,我觉得这很奇怪,因为有人会用VBA来做这件事,这似乎是一件很平常的事情。 再说一次,我对VBA几乎没有什么经验,所以我可能完全忽略了这一点,有一个超级简单的解决scheme,我只是不知道。

我想我看到的错误,这是一个沉默的失败,因为文件包含的链接,有一个开放的对话,等待你说“是”或“否”更新链接。

我们可以通过禁用自动链接更新来禁止这个对话框( 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 

另外,请记住保存并closures文档,然后退出函数中的单词应用程序。

我做了这个其他修改:

在你的函数中, ActiveDocument不是Excel中的一个对象,所以你需要限定它,否则那行也会抛出一个错误。 而不是引用WordApplication.ActiveDocument ,我只是简单地引用您已经分配的WordDoc