엑셀 저장여부 확인 및 파일 강제종료 :: CloseWB 함수 사용법 총정리

파일저장여부에 따라 파일을 강제 종료 또는 취소하는 CloseWB 함수의 사용법 및 동작원리를 단계별로 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2020. 10. 12. 02:21
URL 복사
메모 남기기 : (2)

엑셀 저장여부 확인 및 파일 강제종료 :: CloseWB 함수 사용법 총정리

엑셀 CloseWB 함수 목차 바로가기
요약

엑셀 CloseWB 함수는 파일저장여부에 따라 파일을 강제 종료 또는 취소하는 사용자지정함수입니다.

함수 구문
= CloseWB ( [SaveChanges] , [DisplayAlert] )
사용된 인수 알아보기
인수 설명
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

명령문 동작원리 단계별 알아보기

  1. 이벤트 중복 실행방지를 위해 Application.DisplayAlert 속성을 False로 변경합니다.
    Application.DisplayAlerts = False
  2. 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
  3. '개인용 매크로 통합문서'를 제외한 통합문서의 개수를 카운팅합니다.
        For Each WB In Application.Workbooks
            If WB.Name <> "PERSONAL.XLSB" Then i = i + 1
        Next
  4. 실행중인 통합문서가 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
  5. 실행중인 통합문서가 1개 이상일 경우, 현재 실행중인 파일만 강제종료합니다.
        Else
            If SaveChanges = True Then
                ThisWorkbook.Save
                ThisWorkbook.Close
            Else
                ThisWorkbook.Saved = True
                ThisWorkbook.Close
            End If
        End If
5 2 투표
게시글평점
2 댓글
Inline Feedbacks
모든 댓글 보기
2
0
여러분의 생각을 댓글로 남겨주세요.x