2012-02-21 3 views
1

다음과 같은 문제가 있습니다. 인쇄 대화 상자를 표시하기 전에 MsgBox를 보여주는 간단한 매크로를 작성했습니다. 여기에 소스가 있습니다 :Word VBA 응용 프로그램 더 많은 문서가 열릴 때 이벤트가 더 많이 발생합니다.

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

문서를 인쇄 할 때마다 발생하는 응용 프로그램 수준 이벤트를 만들었습니다. 이 코드가있는 모든 문서에 대해 한 번 트리거되므로 문서를 인쇄 할 때마다 코드가있는 열려있는 모든 문서에 대해 한 번씩 msgbox를 가져옵니다. 인쇄중인 문서에 코드가 있는지 여부에 관계없이 .

그래서 행동이 잘못되지는 않았지만 분명히 원하는 행동은 아닙니다.

Before_Print 이벤트는 템플릿의 ThisDocument 모듈에 넣어야합니다. 그렇게하면 이벤트는 한 번만 발생하며 인쇄 할 문서에 코드가있는 경우에만 발생합니다.

당신은 이벤트를 트리거하는 응용 프로그램 개체의 인스턴스가 활성 문서가 들어있는 인스턴스 여부를 확인하기 위해 App_DocumentBeforePrint 하위에 체크를 넣어 수
0

:

If Me <> ActiveDocument Then Exit Sub 
관련 문제