VBA 같은 경우 반복문에서 에러가 발생하면 함수를 끝내야 합니다. 그럼 자신이 원하는 결과값을 얻지 못하고 종료가 되겠죠. 만약 반복문에서 에러를 일으킬 만한 데이터가 포함되어 있어도 무시하고 최종 결과물을 얻을 수 있는 방법은 없을까요? 오늘은 오류 처리를 위해 사용하는 On Error Resume Next 문을 이용해서 반복문을 끝까지 처리하는 방법에 대해 알아 보겠습니다.
▼ 그림은 합계를 구하는 샘플입니다. 중간에 숫자가 아닌 텍스트가 있어서 에러가 발생하게 되어 있습니다. 텍스트를 무시하고 합계를 구해 보도록 하겠습니다.
▼ 먼저 반복문에서 오류 처리를 위해 On Error GoTo 문을 사용합니다. GoTo 함수의 인수로 지정된 변수 InvalidValue는 에러가 발생했을 때 해당 줄로 이동해서 오류 처리를 하게 됩니다.
Set rng = ActiveSheet.Range("B1:B7")
For Each rCell In rng
On Error GoTo InvalidValue:
iTotal = iTotal + rCell.Value
Next rCell
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA - On Error GoTo 문으로 함수 실행중 오류 처리 하기 ▶ 엑셀 Excel 런타임 오류 1004 해결하기 위한 여러 가지 방법 ▶ 엑셀 Excel 보안 설정으로 인해 매크로 에러 없애기 ▶ 엑셀 VBA Option Explicit 문 변수선언 에러 적용하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 |
▼ 만약 작업자가 이런 에러를 예상하고 있고 그것을 무시하고 계속해서 반복문이 수행되기를 원한다면 On Error Resume Next 문을 사용해야 합니다. 에러 처리 문장이 있는 InvalidValue 아래에 Resume Next 를 넣어 주면 에러 처리 후 For 반복문을 계속해서 진행하게 됩니다.
For Each rCell In rng
On Error GoTo InvalidValue:
iTotal = iTotal + rCell.Value
Next rCell
ActiveSheet.Range("B9") = iTotal
InvalidValue: ‘’에러 처리
MsgBox "Err Number : " & Err.Number
Resume Next
▼ 또 하나 추가할 것이 있습니다. 오류가 발생하지 않은 경우 오류 처리 코드가 실행되지 않도록 작업을 해 줘야 합니다. 오류 처리 루틴 바로 앞에 Exit Sub, Exit Function, Exit Property 문을 넣어 줍니다. 전체 소스는 다음과 같습니다.
Sub ErrorInfo()
Dim rng As Range
Dim rCell As Range
Dim iTotal As Integer
Set rng = ActiveSheet.Range("B1:B7")
For Each rCell In rng
On Error GoTo InvalidValue:
iTotal = iTotal + rCell.Value
Next rCell
ActiveSheet.Range("B9") = iTotal
Exit Sub
InvalidValue:
MsgBox "Err Number : " & Err.Number
Resume Next
End Sub
▼ 위의 함수를 실행한 결과 그림처럼 1번에서 오류가 발생하고 확인을 누릅니다. 그럼 종료되는 것이 아니라 계산은 계속 진행이 되어서 텍스트를 뺀 숫자의 합계를 구하게 됩니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA - On Error GoTo 문으로 함수 실행중 오류 처리 하기 ▶ 엑셀 Excel 런타임 오류 1004 해결하기 위한 여러 가지 방법 ▶ 엑셀 Excel 보안 설정으로 인해 매크로 에러 없애기 ▶ 엑셀 VBA Option Explicit 문 변수선언 에러 적용하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 마지막 행과 열의 수 찾기 (3) | 2023.06.22 |
---|---|
엑셀 VBA 셀에서 연속된 데이터 한 번에 선택 CurrentRegion, UsedRange 사용 (0) | 2023.06.21 |
엑셀 VBA 나머지를 구하기 위한 Mod 연산자와 몫 구하는 연산자 사용법 (0) | 2023.06.21 |
엑셀 VBA 함수 실행 중에 오류 처리하는 구문 On Error GoTo 사용하기 (0) | 2023.06.11 |
엑셀 VBA 배열의 크기를 알아 내기 (0) | 2023.05.29 |
엑셀 VBA 반복문 Do Until 사용하기 (0) | 2023.05.28 |
엑셀 VBA 셀 데이터 검색해서 찾기 (8) | 2023.05.23 |
엑셀 VBA 리스트 멀티 선택해서 추가 삭제하기 (0) | 2023.03.25 |