打开更多文档时,Word VBA应用程序事件会触发更多次

时间:2012-02-21 17:10:10

标签: events vba ms-word word-vba

我有以下问题。我写了一个简单的宏,它在打印对话框之前显示了MsgBox。这是来源:

Public WithEvents App As Application

Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    MsgBox "aaaaa"
End Sub

Private Sub Document_New()
        Set App = Application
End Sub

当我使用此宏从模板打开一个文档时,一切正常。但是当我同时从这个模板打开两个文档时,我遇到了问题。当我点击打印按钮时,MsgBox出现两次。有什么想法吗?

编辑: 当我从这个模板创建文档并创建另一个新文档时,这个文档不是基于这个模板(这两个文档同时打开),我从那个新的空文档打印出来,MsgBox出现了。这也错了吧?

2 个答案:

答案 0 :(得分:2)

您创建了每次打印任何文档时都会触发的应用程序级事件。对于包含此代码的每个文档,它们都会被触发一次,因此每次打印文档时,每次打开包含其中代码的打开文档都会获得一次msgbox,无论打印的文档是否包含其中的代码。

所以,这些行为并没有错,尽管显然它们不是你想要的。

您应该将Before_Print事件放在模板的ThisDocument模块中。这样,事件只会发生一次,并且只有当正在打印的文档中包含代码时才会发生。

答案 1 :(得分:0)

您可以检查App_DocumentBeforePrint子项以检查触发事件的应用程序对象的实例是否是包含活动文档的实例:

If Me <> ActiveDocument Then Exit Sub
相关问题