2014-02-06 145 views
1

我不是很习惯VBA语言,所以我来找你帮忙解决我的问题。VBA - Documents.Activate函数无法正常工作

基本上,我想要做的是在打开MS Word 2010文档的同时,打开一个新文档,将注意力集中在它上面并对其进行操作。

我面临的问题是我可以有效地打开新文档,但设置其上的功能的.activate函数不起作用,因为它后面的指令仍然在第一个文档中执行。

这里是我的代码:

Private Sub BOK_Click() 

*...instructions...* 

'Opens a new document 
Application.Documents.Add 

'Select the latest opened document and sets the focus on it 
Application.Documents(Application.Documents.Count).Activate 

* do stuff * 

End Sub 

如果它可以帮助,完整的上下文是: 我有6预填充模板的主模板在里面,并按照用户的选择(从一个下拉表单)它选择正确的预先填充的模板并在一个新的Word文档中打开它,然后关闭主模板。

回答

1

Documents.Add做些什么:

  • 创建一个窗口
  • 渲染所提供的(或正常,在这种情况下)模板
  • 显示它在窗口的副本
  • 升起所有打开的文档索引为1
  • 为新添加的文档指定索引1
  • 将窗口放在前面并将焦点放在其上

有(通常)不需要显式激活刚刚添加的文档。如果您必须或想要使用激活,最好的做法是通过名称引用文档,因为索引倾向于漂移(如上所述)。

doc1 = ActiveDocument.Name 
Documents.Add 
doc2 = ActiveDocument.Name 
' Do something with document2 
Documents(doc1).Activate 
' Do something with document1 
Documents(doc2).Activate 
' Do something with document2 again