Userform의
이벤트 프로시저 중 Sub UserForm_QueryClose(...)라는 것이 있습니다.
QueryClose라는 단어를 보고 유추하건 데, 아마도 Userform을 닫기 전에 뭔가를 재확인하기
위한 것인 듯 합니다.
Sub UserForm_QueryClose(...)이벤트 프로시저는 Userform의 컨트롤 메뉴인
‘x’버튼을 클릭하거나 ‘Unload Me’를 통해 발생합니다. 즉 어느 방법으로 종료하든 Sub
UserForm_QueryClose(...)이벤트 프로시저를 거치게 됩니다.
그러나 사실 오늘의 관심사는 Sub UserForm_QueryClose(...)의 매개변수인 Cancel
As Integer와 CloseMode As Integer입니다.
Cancel은 사용자의 Userform을 종료명령의 취소여부를 지정하는 것입니다. Cancel을 True로
두게 되면 말 그대로 Userform의 종료는 취소될 것입니다.
Private Sub
UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
Cancel = True
End Sub
따라서 사용자는
Userform을 닫지 못하게 됩니다. 다만 Ctrl+Break키를 통해 중지시킬 수 있습니다.
그러면 CloseMode라는 매개변수는 대체 뭘까요? 말 뜻으로 봐서는 닫는 방식을 알려주는 것
같습니다. CloseMode는 열거형 상수인 VbQueryClose의 구성원을 값으로 가집니다.
다음의 표는
VbQueryClose의 각각의 값과 이에 대한 설명입니다.
상수 |
값 |
설 명 |
vbFormControlMenu |
0 |
The user
chose the Close command from the Control menu on the
form. |
vbFormCode |
1 |
The Unload
statement is invoked from code. |
vbAppWindows |
2 |
The current
Microsoft Windows operating environment session is
ending. |
vbAppTaskManager |
3 |
The Windows
Task Manager is closing the application. |
vbFormMDIForm |
4 |
An MDI
child form is closing because the MDI form is closing.
Not supported for UserForm. |
시험삼아 Userform을
두고 다음과 같은 코딩을 해보시죠. Userform에는 하나의 CommandButton(Caption은
cmdCancel )을 올려두었습니다.
Private Sub cmdCancel_Click()
Unload Me
End Sub
Private Sub
UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
If CloseMode =
VbQueryClose.vbFormControlMenu Then
MsgBox "컨트롤 버튼을 이용하여 닫습니다"
ElseIf CloseMode =
VbQueryClose.vbFormCode Then
MsgBox "코딩을 통해서 닫습니다"
End If
End Sub
<그림.컨트롤
버튼을 이용한 userform닫기>
<그림.Cancel
버튼을 이용한 userform닫기>
이것을 이용하여 컨트롤
버튼을 이용하여 닫지 못하도록 만들 수 있습니다. (이럴 필요가 있나 싶은데 종종 이런 걸 원하는 사람들도
있습니다)
Private Sub
UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
If CloseMode =
VbQueryClose.vbFormControlMenu Then
Cancel = True
End If
End Sub |