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

标签 vba ms-word

我希望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,但是在.Activate调用上遇到了4160'Bad file name'错误的错误。如果我注释掉对.Activate的调用,即使已经打开了其他文档,ActiveDocument似乎也已设置为origDoc文档(我不确定如何管理文档集合,以及Word如何确定下一个ActiveDocument将如何管理)如果您以编程方式关闭当前的ActiveDocument)

那么,在文档上调用.Open是否将Document显式设置为ActiveDocument?另外,在已经处于事件状态的文档上调用.Activate是否会导致错误?

我实际上还没有找到太多有关此问题的文档,所以在此先感谢您的任何建议和见解!

最佳答案

简单的答案是肯定的。通过使用代码打开文档,可以将其设置为事件文档,然后在下一行中将其关闭,然后在下一行中尝试将其激活,这将失败,因为该文档不再打开。一般而言,VBA似乎可以这种方式工作。

使用ActiveDocument时要特别小心,因为在代码或其他地方,哪些 Action 使文档“处于事件状态”并不总是不言自明的(我没有证据,但即使是自动保存也可以做到)。如果您不确定是否最好通过Documents集合来引用文档,尽管如果该文档不再打开也可能导致错误,并且您可能不得不遍历该集合以确保该文档是正确的,其实是开放的。我在excel VBA中遇到了很多问题,在这方面Word VBA的功能似乎完全相同。

同样,VBA在释放应用程序对象方面也很不灵活。如果不小心,最终将有多个WINWORD进程,无论您是在代码中关闭还是退出它们,都可以在任务管理器中查看它们。我发现可以解决此问题的代码相当于模拟任务管理器中选择END PROCESS的过程。它可以工作,但是应该有一个更好的解决方案。

关于vba - 在VBA宏中打开/激活Word文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706516/

相关文章:

python - 有没有办法使用 python-docx 更改Word文档字体?

javascript - Word JS 加载项 - 如何在客户端计算机上存储用户特定数据

python - 如何在 Word 2007 .docx 文件中搜索单词?

excel - 如何在 Excel 中将文本日期转换为日期格式,如 mm/dd/yyyy

vba - 如何使用 VBA 修剪 MS Word 中的表格单元格值

vba - 如何验证 Excel 文件是否已成功导入 MS Access?

php - 使用php阅读带图片的ms word文档

excel - 使用 JIRA 图表动态创建 MS Word 报告?

Excel VBA Msxml2.XMLHTTP.6.0 与 Msxml2.ServerXMLHTTP.6.0

vba - 删除超链接性能