我试图通过将数据放入电子表格并链接到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.