엑셀(Excel) VBA - 사용자정의 폼의 타이틀바에서 X 버튼 제어하기

엑셀(Excel)/VBA

엑셀(Excel) VBA - 사용자정의 폼의 타이틀바에서 X 버튼 제어하기

 

환경 : Microsoft Excel 2010

 

사용자정의 폼을 개발하다 보시면 폼상단에 X 버튼이 있는데 그걸 클릭하게 되면 아무 통제없이 창이 닫히게 되고 의도치 않은 일들이 벌어지게 됩니다. 버튼을 없앨수 있는지는 아직 모르겠고 버튼을 클릭했을 때 기능이 동작하지 않도록 구현을 하였습니다.

 

폼에 보시면 상단에 X 버튼이 있습니다. 이 버튼을 클릭했을 때 이벤트를 가로채지 위해서 폼 소스로 갑니다.

 

엑셀(Excel) VBA - 사용자정의 폼의 타이틀바에서 X 버튼 제어하기

 

소스에서 상단에 개체를 선택하는 콤보박스로 갑니다. 왼쪽 콤보에서 UserForm 을 선택하고 오른쪽 콤보에서 QueryClose 를 선택해서 함수뼈대를 만듭니다.

엑셀(Excel) VBA - 사용자정의 폼의 타이틀바에서 X 버튼 제어하기

 

 

만들어진 뼈대는 아래와 같습니다. 여기에서 두 번째로 넘어오는 CloseMode 값으로 폼에서 종료 이벤트가 발생했는지 판단하게 됩니다.

 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

End Sub

 

CloseMode 의 상수값은 다음과 같습니다. 이 중 윈도우 OS 가 강제로 엑셀을 종료시키는 경우와 폼에서 닫기 이벤트가 발생한 것이 있습니다. 우리가 찾아야 하는 이벤트는 vbFormControlMenu 입니다.

 

l  vbFormControlMenu : 폼에서 닫기 명령이 호출되었을 때

l  vbFormCode : 코드에서 Unload 명령문이 호출되었을 때

l  vbAppWindows : 윈도우가 종료되어 엑셀이 종료될대

l  vbAppTaskManager : 윈도우 작업관리자가 엑셀을 종료했을 때

 

아래 소스는 vbFormControlMenu 일때 메시지를 호출해주고 Cancel = True 로 셋팅해줍니다. False 로 하게 되면 폼화면이 종료 됩니다.

 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = vbFormControlMenu Then

        MsgBox "x 버튼은 동작하지 않습니다."

        Cancel = True

    End If

End Sub

 

아래 그림과 같이 클릭했을 때 종료되지 않게 하면 되면 동작하지 않는 것 처럼 꾸밀수가 있는 것이죠.

엑셀(Excel) VBA - 사용자정의 폼의 타이틀바에서 X 버튼 제어하기

 

 

Posted by 녹두장군