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 무한 루프 빠져 나오거나 취소 기능 없애는 방법 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA Cells 속성의 다양한 사용법 (0) | 2023.06.22 |
---|---|
엑셀 VBA 마지막 행과 열의 수 찾기 (3) | 2023.06.22 |
엑셀 VBA 셀에서 연속된 데이터 한 번에 선택 CurrentRegion, UsedRange 사용 (0) | 2023.06.21 |
엑셀 VBA 나머지를 구하기 위한 Mod 연산자와 몫 구하는 연산자 사용법 (0) | 2023.06.21 |
엑셀 VBA 반환한 배열 데이터 셀에 표현하기 (0) | 2023.06.10 |
엑셀 VBA On Error GoTo 반복문에서 에러 거르기 (0) | 2023.06.09 |
엑셀 VBA 배열의 크기를 알아 내기 (0) | 2023.05.29 |
엑셀 VBA 반복문 Do Until 사용하기 (0) | 2023.05.28 |