Событие приложения Word VBA срабатывает чаще, если открыто больше документов - PullRequest
1 голос
/ 21 февраля 2012

У меня следующая проблема.Я написал простой макрос, который показывает 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 ]

2 голосов
/ 22 февраля 2012

Вы создали события уровня приложения, которые запускаются каждый раз при печати любого документа.Они запускаются один раз для каждого документа, в котором есть этот код, поэтому каждый раз, когда вы печатаете документ, вы получаете msgbox один раз для каждого открытого документа, в котором есть код, независимо от того, есть ли в документе, который печатается, код,

Итак, поведение не является неправильным, хотя очевидно, что оно не то, что вам нужно.

Вы должны поместить событие Before_Print в модуль ThisDocument вашего шаблона.Таким образом, событие произойдет только один раз и только тогда, когда напечатанный документ содержит код.

0 голосов
/ 22 февраля 2013

Вы можете поставить галочку в подпрограмме App_DocumentBeforePrint, чтобы проверить, является ли экземпляр объекта приложения, запускающего событие, экземпляром, содержащим активный документ:

If Me <> ActiveDocument Then Exit Sub
...