엑셀 VBA 실행 중 발생하는 오류를 On Error GoTo를 활용해 제어하는 방법을 소개합니다.
<본문 이동 링크>
<참고할만한 글>
[엑셀/엑셀 VBA] - 엑셀 VBA 오류 정보(번호 및 이유) 확인하는 방법
[엑셀/엑셀 VBA] - 엑셀 VBA 오류 무시하는 방법
1. 코드 기본 설명
- On Error GoTo 는 에러발생 시 코드 뒤에 적힌 지정된 "레이블명" 위치로 이동하며 코드를 진행하도록 함
- 프로시저 안에 레이블명으로 선언된 레이블이 필수로 있어야 함
2. On Error GoTo 활용
▶ 코드 예시
- integer 값을 입력하도록 설정 후, 문자 입력시 오류 메세지를 알리는 코드
Sub test_GoTo()
Dim 숫자 As Integer
On Error GoTo 오류처리:
숫자 = InputBox("A1셀에 입력할 숫자를 입력하세요.")
Cells(1, 1).Value = 숫자
오류처리:
MsgBox "오류가 발생했습니다."
End Sub
▶ 실행결과(문자 "ABC" 입력시)
- 위 코드에서 '숫자'변수에 문자를 입력함에 따라 오류가 발생하고, 오류 발생명령문에서 '오류처리:' 레이블로 이동하여 오류발생 메세지박스를 나타냄
▶ 실행결과(숫자 "123"입력 시)
- '숫자'변수에 정상적인 숫자를 입력하였으나, 결과는 A1셀에 입력된 숫자 값을 삽입과 동시에 오류 알림메세지가 나타남
※ On Error GoTo 레이블명은 오류가 발생했을 때 실행순서를 바꾸는 것으로, 위 코드와 같이 작성하면 정상동작에서도 전체코드가 순차적으로 실행됨에 따라 오류처리: 레이블의 코드도 실행되며 실행결과가 예상과 달라짐!
(오류 처리 시 이와 같은 상황을 예방하기 위해 코드 보완이 필요 -> "3번 에러 처리 심화" 참고)
3. 에러 처리 심화
▶ 2번의 VBA코드 실행 중 정상적인 숫자를 입력해도 원치 않는 결과가 나타나는 것을 예방하기 위해 아래와 같은 코드로 보완할 수 있음
▶ 코드 예시
- 숫자 입력 시, A1셀에 입력된 숫자를 삽입하고 '정상처리' 메세지 알림
- 문자 입력시, A1셀에 별도 값을 삽입하지 않고 '오류발생' 메세지 알림
Sub test_GoTo()
Dim 숫자 As Integer
On Error GoTo 오류참조:
숫자 = InputBox("A1셀에 입력할 숫자를 입력하세요.")
Cells(1, 1).Value = 숫자
오류참조:
If Err.Number = 0 Then
MsgBox "정상처리되었습니다."
Else
MsgBox "오류가 발생했습니다." _
& vbNewLine & "오류번호 : " & Err.Number _
& vbNewLine & "오류설명 : " & Err.Description
End If
End Sub
▶ 실행결과(문자 "ABC" 입력 시)
- integer 변수에 적합하지 않은 문자를 입력하여 오류가 발생하고 오류코드번호가 0이 아니므로 '오류발생' 메세지가 나타남
▶ 실행결과(숫자 "123"입력 시)
- 오류가 발생하지 않는 경우 Err.Number는 "0" 값을 가지므로, VBA 코드가 순차진행하며 '오류처리:' 레이블 코드를 실행하더라도 조건문을 통해 원하는 결과 도출 가능
'엑셀 > 엑셀 VBA' 카테고리의 다른 글
엑셀 VBA 자주쓰는 테이블 서식(테두리,음영) 자동화 (1) | 2023.04.24 |
---|---|
엑셀 VBA 엑셀도형 자동삽입 및 추가 설정 방법 (1) | 2023.04.24 |
엑셀 VBA 오류 무시하는 방법 (0) | 2023.01.30 |
엑셀 VBA 오류 정보(번호 및 이유) 확인하는 방법 (0) | 2023.01.30 |
엑셀 VBA 다중범위(다중셀) 선택하는 방법 (0) | 2023.01.17 |