엑셀 저장여부 확인 및 파일 강제종료 :: CloseWB 함수 사용법 총정리
엑셀 CloseWB 함수 목차 바로가기
요약
엑셀 CloseWB 함수는 파일저장여부에 따라 파일을 강제 종료 또는 취소하는 사용자지정함수입니다.
함수 구문
사용된 인수 알아보기
인수 | 설명 |
SaveChanges [Boolean, 선택인수] |
True 일 경우 통합문서를 저장 한 뒤 파일을 강제종료 합니다. False 일 경우 파일의 변경사항을 저장하지 않고 강제종료 합니다. |
DisplayAlert [Boolean, 선택인수] |
기본값은 False 입니다. 파일저장여부를 확인하는 안내창을 띄우지 않고 SaveChanges 에 따라 파일을 강제종료합니다.
DisplayAlert가 True 일 경우, SaveChanges 값은 무시됩니다. 사용자가 안내창에서 선택한 파일저장여부에 따라 파일이 강제종료 됩니다. |
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] CloseWB 함수 :: 파일 저장여부 확인 및 강제종료예제파일
상세 설명
CloseWB 함수는 파일저장여부를 확인한 뒤, 저장여부에 따라 파일을 저장 또는 저장하지 않고 파일을 강제종료하는 함수입니다. 사용자지정함수이므로 시트 함수목록에 표시되지만, 시트에서는 사용불가한 함수입니다. 시트함수목록에 표시되지 않도록 숨기려면, 함수를 Private Function으로 변경합니다.
CloseWB 함수는 통합문서의 BeforeClose 이벤트(파일 종료 전 작동)와 같이 사용하면 효과적입니다. CloseWB 함수는 결과값으로 True 또는 False 를 반환하는데, 이는 BeforeClose 이벤트의 Cancel (종료 취소) 인수로 설정할 수 있습니다. 파일 종료단계를 취소할 경우, CloseWB 함수는 결과값으로 True를 반환합니다.
만약 파일을 종료하기 전, 특정 동작을 수행해야 할 경우 LogOut 보조명령문을 추가로 작성합니다. 예를들어, 시트의 특정부분을 삭제하거나 특정 시트를 숨기는 등의 동작을 수행할 수 있습니다.
엑셀 저장여부 확인 및 파일 강제종료, CloseWB 함수 동작원리
CloseWB 함수 전체 코드
Public blnClose As Boolean Function CloseWB(Optional SaveChanges As Boolean = True, Optional DisplayAlert As Boolean = False) As Boolean Dim WB As Workbook Dim i As Long Dim vbYN As VbMsgBoxResult Application.DisplayAlerts = False Logout If blnClose = False Then If DisplayAlert = True Then vbYN = MsgBox("'" & ThisWorkbook.Name & "' 의 변경내용을 저장하시겠습니까?", vbYesNoCancel) If vbYN = vbNo Then SaveChanges = False: blnClose = True If vbYN = vbYes Then SaveChanges = True: blnClose = True If vbYN = vbCancel Then blnClose = False: GoTo Finally End If For Each WB In Application.Workbooks If WB.Name <> "PERSONAL.XLSB" Then i = i + 1 Next If i = 1 Then If SaveChanges = True Then ThisWorkbook.Save Application.EnableEvents = False Application.Quit Else ThisWorkbook.Saved = True Application.EnableEvents = False Application.Quit End If Else If SaveChanges = True Then ThisWorkbook.Save ThisWorkbook.Close Else ThisWorkbook.Saved = True ThisWorkbook.Close End If End If End If CloseWB = False Application.DisplayAlerts = True Exit Function Finally: Application.DisplayAlerts = True CloseWB = True End Function Sub Logout() '파일 종료 전 실행 할 특정 로그아웃 동작을 작성합니다 End Sub
실전 사용 예제
파일을 종료하기 전, 파일저장여부를 묻는 안내창을 띄운 뒤, 사용자의 결정에 따라 파일을 강제종료하도록 명령문을 작성합니다. 방법은 아주 간단합니다.
아래 명령문을 복사하여 현재_통합_문서 모듈에 붙여넣기합니다.
Private Sub Workbook_BeforeClose(Cancel As Boolean) ' 통합문서가 종료되기 전, CloseWB 함수를 실행한 뒤 사용자가 '취소' 버튼을 클릭할 경우 파일 강제종료를 취소합니다. ' 사용자가 예 / 아니오를 클릭할 경우 파일을 결과값에 따라 파일이 강제 종료 됩니다. Cancel = CloseWB(, True) End Sub
명령문 동작원리 단계별 알아보기
- 이벤트 중복 실행방지를 위해 Application.DisplayAlert 속성을 False로 변경합니다.
Application.DisplayAlerts = False
- DisplayAlert 인수가 True 일 경우, 파일저장여부를 묻는 안내창을 띄운 뒤 SaveChanges 값을 변경합니다.
If DisplayAlert = True Then vbYN = MsgBox("'" & ThisWorkbook.Name & "' 의 변경내용을 저장하시겠습니까?", vbYesNoCancel) If vbYN = vbNo Then SaveChanges = False: blnClose = True If vbYN = vbYes Then SaveChanges = True: blnClose = True If vbYN = vbCancel Then blnClose = False: GoTo Finally End If
- '개인용 매크로 통합문서'를 제외한 통합문서의 개수를 카운팅합니다.
For Each WB In Application.Workbooks If WB.Name <> "PERSONAL.XLSB" Then i = i + 1 Next
- 실행중인 통합문서가 1개만 있을 경우, 파일과 엑셀프로그램을 동시에 강제종료합니다.
If i = 1 Then If SaveChanges = True Then ThisWorkbook.Save Application.EnableEvents = False Application.Quit Else ThisWorkbook.Saved = True Application.EnableEvents = False Application.Quit End If
- 실행중인 통합문서가 1개 이상일 경우, 현재 실행중인 파일만 강제종료합니다.
Else If SaveChanges = True Then ThisWorkbook.Save ThisWorkbook.Close Else ThisWorkbook.Saved = True ThisWorkbook.Close End If End If
- 이벤트 중복 실행방지를 위해 Application.DisplayAlert 속성을 False로 변경합니다.