엑셀/엑셀 VBA

엑셀 VBA 오류 제어하는 방법(On Error GoTo)

90년대생 직장인 2023. 1. 31. 00:48
반응형

엑셀 VBA 실행 중 발생하는 오류를 On Error GoTo를 활용해 제어하는 방법을 소개합니다.


<본문 이동 링크>

1. 코드 기본 설명

2. On Error GoTo 활용

3. 에러 처리 심화

 

<참고할만한 글>

[엑셀/엑셀 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번 에러 처리 심화" 참고)

728x90

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 코드가 순차진행하며 '오류처리:' 레이블 코드를 실행하더라도 조건문을 통해 원하는 결과 도출 가능

반응형