【发布时间】:2010-10-16 22:20:39
【问题描述】:
我希望 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“错误文件名”错误。如果我注释掉对.Activate 的调用,则似乎ActiveDocument 设置为origDoc 文档,即使已经打开了其他文档(我不太确定如何管理文档集合,以及Word 如何确定如果您以编程方式关闭当前的 ActiveDocument,接下来的 ActiveDocument 会是什么)
那么,在文档上调用.Open 是否明确地将文档设置为ActiveDocument?另外,在已经激活的文档上调用.Activate 会导致错误吗?
我真的找不到太多关于此的文档,所以提前感谢任何建议和见解!
【问题讨论】:
-
大概您一直在将文档的流式副本作为代码中的 ActiveDocument 处理。最好在代码开头将该文档对象分配给一个变量,然后在其余代码中使用您的变量。正如其他人指出的那样,您可能在第二行代码中关闭了错误版本的文档。此外,在打开“原始”文档对象时将其分配给变量也是明智之举。