엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법

엑셀(Excel)/VBA

엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법

 

환경: Microsoft Excel 2013

 

이전에 소개했던 재귀 호출이나 For 같은 반복문을 잘못 돌려서 로직이 무한루프에 빠졌다면 어떻게 빠져 나올 수 있을까요? Ctrl + Alt + Del 을 눌러 엑셀 프로세스를 종료해야만 할까요? 도스 명령창에 명령어를 입력하고 반응이 없을 때 Ctrl + C 를 눌러 종료하듯 VBA 에서 무한 루프를 종료하는 단축키가 있습니다.

 

아래 샘플 소스처럼 작업자의 실수로 인해 무한 루프에 빠질 수 있습니다. x = 5 일 때 Do While x > 2 가 항상 참이기 때문입니다. Do While 같은 경우 조건문이 거짓일 때만 종료가 되거든요. 이런 경우 간단하게 무한 루프를 빠져 나오는 방법은 Esc 를 클릭하는 것입니다.

 

Sub 무한루프()

 

    Dim x As Long

     x = 5

   

    Do While x > 2

         x = x + 1

    Loop

   

End Sub

 

 

물론 위의 소스 같은 경우 I 값이 계속해서 증가하기 때문에 Esc 를 누르지 않아도 오버플로어가 나서 자동 종료될 수도 있습니다

 

그런데 사용자가 의도적으로 무한루프나 긴 시간 동안 반복을 해야 되는 경우 취소 기능이 먹히지 않도록 제한하는 경우도 있겠죠. 이 때는 Application.EnableCancelKey 속성을 이용해서 중단하는 취소키 Esc 가 적용되지 않도록 소스를 넣어 줘야 합니다.

 

Application.EnableCancelKey = xlDisabled

 

Application.EnableCancelKey는 프로시져의 흐름을 중단시킬 수 있는 Ctrl+Break(또는 Esc)를 처리하는 방법을 지정하는 것입니다. 다음은 Application.EnableCancelKey에 지정할 수 있는 상수값과 의미입니다.

 

l  xlDisabled : 취소키를 사용할 수 없게 됩니다.

l  xlInterrupt : 현재 프로시저를 중지하여 사용자가 프로시저를 디버깅하거나 끝낼 수 있도록 합니다.

l  xlErrorHandler : 인터럽트가 실행 중인 프로시저에 오류로 전달되고 On Error GoTo 문을 사용하여 오류 처리기 설정으로 차단할 수 있습니다. 차단할 수 있는 오류 코드는 18번입니다.

 

만약 Application.EnableCancelKey = xlDisabled 사용해서 취소키가 먹히지 않도록 했다면 무한루프 종료는 Ctrl + Shift + Delete 나 작업 관리자에서 엑셀 프로그램을 종료시켜야 합니다

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군