我试图通过将数据放入电子表格并链接到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的经验,所以我可能完全忽略了这一点,并且有一个超级简单的解决方案我只是不知道。
发布于 2013-08-28 22:56:09
我想我看到了错误,这是一个静默的失败,因为文档包含链接,有一个打开的对话框等待您说“是”或“否”来更新链接。
我们可以通过禁用自动链接更新(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
此外,请记住保存并关闭文档,然后在函数中退出word应用程序。
我做了另一个修改:
在您的函数中,ActiveDocument
不是Excel中的对象,因此需要对其进行限定,否则该行也会抛出错误。我只是简单地引用您已经分配的WordDoc
,而不是指WordApplication.ActiveDocument
。
https://stackoverflow.com/questions/18484268
复制相似问题