이전에 소개했던 재귀 호출이나 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 나 작업 관리자에서 엑셀 프로그램을 종료시켜야 합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 반복문 For Next 문 사용하기 ▶ 엑셀 VBA 반복문 Do While 사용하기 ▶ 엑셀 VBA 반복문 Do Until 사용하기 ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA For Each 반복문 이용해서 셀 영역 병합 및 합계 구하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 콤보 상자에 하나 혹은 여러 개의 열 추가하는 방법 (0) | 2023.07.08 |
---|---|
엑셀 VBA 스핀(Spin) 컨트롤 사용하기 (0) | 2023.07.03 |
엑셀 VBA 영역을 선택했을 때 이벤트 처리하기 (0) | 2023.07.02 |
엑셀 VBA 사용자 정의 폼에서 그림 표시와 셀에 추가하기 (0) | 2023.07.02 |
엑셀 VBA 매크로 함수로 공백 제거하기, Trim, RTrim, LTrim 함수 이용 (0) | 2023.06.28 |
엑셀 VBA 날짜 데이터를 비교하거나 연산하기 (0) | 2023.06.27 |
엑셀 VBA 변수 범위 종류와 설정 방법 (1) | 2023.06.23 |
엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기 (3) | 2023.06.22 |