当前位置:  开发笔记 > 后端 > 正文

在VBA宏中打开/激活Word文档

如何解决《在VBA宏中打开/激活Word文档》经验,为你挑选了1个好方法。

我希望VB/VBA专家可以帮助我.请考虑以下事项:用户在Word 2003中打开文档,在Normal.dot AutoOpen宏中,我们查看当前文档,如果已通过单击网页上的链接打开它,并满足某些其他应用程序特定条件,关闭流式"复制"并打开源文档(在共享驱动器上找到我们可以假设用户有权访问):

Documents.Open origDoc
Documents(ActiveDocument.FullName).Close SaveChanges:=wdDoNotSaveChanges
Documents(origDoc).Activate

With ActiveDocument
    ''# Do work
End With

我的想法是我需要打电话Activate以确保原始文件是ActiveDocument,但我在电话中收到4160'错误的文件名'错误.Activate.如果我注释掉调用.Activate,它似乎ActiveDocument设置为origDoc文档,即使已经打开了其他文档(我不确定如何管理文档集合,以及Word如何确定下一步ActiveDocument将是什么如果你以编程方式关闭当前的ActiveDocument)

那么,调用.Open文档是否明确将Document设置为ActiveDocument?另外,调用.Activate已经存在的文档会导致错误吗?

我真的没有找到很多关于此的文档,所以提前感谢任何建议和见解!



1> 小智..:

简单的答案是肯定的.通过使用您的代码打开文档,您可以将其作为活动文档,然后在下一行中关闭并尝试在下一行中激活,这会因文档不再打开而失败.VBA一般似乎都是这样工作的.

重要的是要小心使用ActiveDocument,因为在代码或其他地方,哪些操作会使文档"活动"并不总是不言而喻(我没有证据,但即使是自动保存也可以这样做).如果有任何疑问,最好通过Documents集合引用文档,但如果文档不再打开,这也可能导致错误,并且您可能不得不求助于遍历集合以确保文档是,事实上,开放.我使用excel VBA遇到了很多,而Word VBA似乎在这方面具有相同的功能.

此外,VBA在释放应用程序对象方面很不稳定.如果你不小心,你最终会得到多个WINWORD进程,可以在任务管理器中查看,无论你是否在代码中关闭或退出它们.我发现解决这个问题的代码相当于模拟在任务管理器中选择END PROCESS的过程.它有效,但应该有一个更好的解决方案.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有