Word 2003 VBA ошибка?DocumentBeforePrint выполнить дважды? - PullRequest
0 голосов
/ 30 мая 2018

Это ошибка Word 2003 VBA?DocumentBeforePrint выполняется несколько раз?

Я ссылаюсь

http://msdn.microsoft.com/en-us/library/office/aa211873(v=office.11).aspx

http://msdn.microsoft.com/en-us/library/office/aa211915(v=office.11).aspx

DocumentBeforeClose синтаксис

Я делаю test.dot с макросом DocumentBeforePrint.

'ref http://msdn.microsoft.com/en-us/library/office/aa211915(v=office.11).aspx
Dim X As New EventClassModule

Sub Register_Event_Handler()
Set X.appWord = Word.Application
End Sub

Private Sub Document_New()
   Call Register_Event_Handler
End Sub

Private Sub Document_Open()
   Call Register_Event_Handler
End Sub


'ref http://msdn.microsoft.com/en-us/library/office/aa211873(v=office.11).aspx

Public WithEvents appWord As Word.Application

Private Sub appWord_DocumentBeforePrint _
    (ByVal Doc As Document, _
    Cancel As Boolean)

    MsgBox "WORKING!"
End Sub

Когда я нажимаю Ctrl + P, макрос выполняется.

Есть ошибка.Когда я дважды щелкаю test.dot, чтобы сгенерировать два файла слов (a.doc / b.doc).

Нажмите Ctrl + P, DocumentBeforePrint выполнит дважды .

Если я сгенерирую файлы из 3 слов, нажмите Ctrl + P, макрос будет выполнен три раза.

Что не так?Я просто хочу казнить один раз.

1 Ответ

0 голосов
/ 30 мая 2018

Похоже, вы поместили весь код, кроме кода печати, в модуль кода ThisDocument.Это неверноПоскольку вы указали ^ Dim X как NewEventClassModule in ThisDocument`, который сам по себе является модулем класса, представляющим каждый документ , было создано несколько экземпляров.Объявление его в «простом модуле» не вызывает этой проблемы.

Вам необходимо три модуля:

«Простой» модуль:

Dim X As New EventClassModule

Sub Register_Event_Handler()
  Set X.appWord = Word.Application
End Sub

Модуль «ThisDocument»:

Private Sub Document_New()
   Register_Event_Handler
End Sub

Private Sub Document_Open()
   Register_Event_Handler
End Sub

"EventClassModule"

Public WithEvents appWord As Word.Application

Private Sub appWord_DocumentBeforePrint _
    (ByVal Doc As Document, _
    Cancel As Boolean)

    MsgBox "WORKING!"
End Sub
...