Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 함수 실행 중에 오류 처리하는 구문 On Error GoTo 사용하기

엑셀(Excel)/VBA
반응형

VBA 에서는 에러가 발생하는 경우 실행을 중단하고 적절한 처리를 원할 때 사용하는 구문이 On Error GoTo 입니다. 해당 구문은 완성도 높은 프로그램을 구현하기 위해서 반드시 필요하며 자주 사용하는 구문이기도 합니다.

 

On Error GoTo 구문 사용하기

 

구문은 다음과 같습니다. On Error GoTo 뒤에 사용자가 지정한 레이블이름을 입력합니다. 동작 원리는 On Error GoTo 아래에서 수행하는 코드에서 오류가 발생했을 때 나머지는 건너뛰고 지정한 레이블이름이 있는 행으로 이동합니다.

 

On Error GoTo 레이블이름
   코드
레이블이름 :
   코드

 

샘플 코드는 아래와 같습니다. On Error GoTo 문 뒤에 레이블이름은 Err_Check 입니다. 에러가 발생하면 Err_Check : 레이블이 있는 위치로 이동해서 바로 아래 코드부터 실행합니다. 오류가 발생한 시점부터 아래 코드는 무시하고 지나갑니다.

Sub ErrorCheckSample()

'' 에러 체크를 위한 문장
On Error GoTo Err_Check

    Dim data As Integer
    data = 50000 / 0
    MsgBox "Data 값은 " & data

'' 에러가 발생하면 실행되는 곳
Err_Check:
    MsgBox "오류 발생"

End Sub

  

그림처럼 오류가 발생한 data = 50000 / 0 의 다음 코드인 MsgBox 함수는 실행하지 않았습니다. Err_Check 레이블이 있는 위치로 이동해서 바로 아래 코드인 MsgBox 를 실행했습니다.

 

오류 내용을 조금 더 구체적으로 보고 싶다면 Err 객체를 이용합니다. 오류 코드값은 Err.Number 에 저장됩니다. 변수값이 0 이 아니라면 오류가 발생한 것입니다. 오류에 대한 설명은 Err.Description 으로 알 수 있습니다. 코드에서 vbCr 은 줄바꿈 아시키코드 값인 chr(13) 을 뜻하는 상수입니다.

Sub ErrorCheckSample()

'' 에러 체크를 위한 문장
On Error GoTo Err_Check

    Dim data As Integer
    data = 50000 / 0
    MsgBox "Data 값은 " & data

'' 에러가 발생하면 오게될 레이블명
Err_Check:
    If Err.Number <> 0 Then
        MsgBox "오류번호 : " & Err.Number & vbCr & _
        "오류내용 : " & Err.Description, vbCritical, "오류"
    End If

End Sub

  


 

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※
엑셀 VBA On Error GoTo 반복문에서 에러 거르기
엑셀 Excel 런타임 오류 1004 해결하기 위한 여러 가지 방법
엑셀 VBA Option Explicit 문 변수선언 에러 적용하기
엑셀 VBA GoTo 문 이용해서 줄로 분기하기
엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법

 

 

On Error Resume Next

 

이번 구문은 에러가 발생했을 때 특정 위치로 이동하는 것이 아니라 무시하고 계속 진행하게 합니다. 특정 코드 영역에서 에러가 발생해도 별다른 조치 없이 계속 진행하기를 원할 경우 주로 사용합니다. 샘플 코드는 아래와 같습니다.

Private Sub ErrorCheckSample2()

'' 에러 체크를 위한 문장
On Error Resume Next

    Dim data As Integer
    data = 50000 / 0
    MsgBox "Data 값은 " & data

End Sub

  

샘플 코드를 실행하면 data = 50000 / 0 라인에서 에러가 발생합니다. 하지만 On Error Resume Next

구문으로 인해 멈추지 않고 마지막 라인인 MsgBox 함수를 실행합니다.

 

추가로 On Error Resume Next 아래 코드가 끝나고 나면 On Error GoTo 0 구문으로 오류값을 초기화하는 것이 좋습니다. 동일한 함수에서 코드가 긴 경우 다른 오류 코드들에 영향을 줄 수 있기 때문입니다. On Error GoTo 구문 뒤에 0 은 오류 객체에 저장된 값을 초기값으로 변경합니다.

Private Sub ErrorCheckSample2()

'' 에러 체크를 위한 문장
On Error Resume Next

    Dim data As Integer
    data = 50000 / 0
    MsgBox "Data 값은 " & data
    MsgBox "오류번호 : " & Err.Number & vbCr

'' 발생한 모든 오류값들을 없애기 위함
On Error GoTo 0
    MsgBox "오류번호 : " & Err.Number & vbCr

End Sub

  

아래 그림처럼 On Error GoTo 0 을 실행한 결과 오류 코드값인 11 0 으로 변경한 것을 알 수 있습니다.


아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※
엑셀 VBA On Error GoTo 반복문에서 에러 거르기
엑셀 Excel 런타임 오류 1004 해결하기 위한 여러 가지 방법
엑셀 VBA Option Explicit 문 변수선언 에러 적용하기
엑셀 VBA GoTo 문 이용해서 줄로 분기하기
엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법
반응형
Posted by 녹두장군

댓글을 달아 주세요