VBA On 오류 문 | 오류를 처리하는 3 가지 주요 방법

오류 문에 Excel VBA

VBA On Error 문은 오류 처리 메커니즘의 한 유형으로, 어떤 유형의 오류가 발생하면 코드가 어떤 유형의 오류가 발생하면 어떻게하는지 안내하는 데 사용됩니다. 일반적으로 코드에서 오류가 발생하면 실행이 중지되지만 코드에서이 문을 사용하면 코드는 오류가 발생했을 때 수행 할 지침이 있으므로 계속됩니다.

코드의 오류를 예상하면 VBA 코딩 전문가가됩니다. 코드를 100 % 효율적으로 만들 수는 없습니다. 비록 어떤 방식 으로든 오류가 발생할 수 있다고 확신하더라도 코드를 100 % 효율적으로 만들 수는 없습니다.

모든 종류의 오류를 식별하고 처리하는 것은 거의 불가능한 작업이지만 VBA에서 오류를 처리하는 방법은 다릅니다. 코드를 작성하는 동안 오류 코드의 종류를 예상하지 못할 수 있지만 오류가 발생하면 코드 자체를 작성하는 것보다 디버깅에 더 많은 시간을 할애하게됩니다.

오류 란 무엇입니까?

오류는 기능이나 잘못된 코드로 인해 한 줄의 코드를 실행할 수 없습니다. 따라서 오류를 예상하고 처리하십시오.

예를 들어, 거기에없는 시트를 삭제하려고하면 분명히 해당 코드 줄을 실행할 수 없습니다.

오류는 선언되지 않은 변수로 인해 컴파일 된 오류입니다. 두 번째는 코더의 잘못된 입력으로 인한 데이터 입력 오류이고, 세 번째는 VBA가 코드 줄을 인식 할 수 없기 때문에 발생하는 런타임 오류입니다. 거기에없는 워크 시트 또는 워크 북에 액세스하거나 작업하려고합니다.

그러나 VBA에는 이러한 모든 종류의 오류를 처리하는 명령문이 있습니다. 즉, "On Error"명령문입니다.

On Error 문의 유형

VBA에서 오류를 처리하는 핵심 포인트는 "On Error"문입니다. 예를 들어 On Error "resume next line", "go to or jump to another line"등…

On Error 문에는 세 가지 종류의 문이 있습니다.

  1. GoTo 0  은 런타임 오류가 발생할 때마다 Excel 또는 VBA가 발생한 오류 종류를 나타내는 오류 메시지 상자를 표시해야 함을 의미합니다. VBA가 코드를 실행하자마자 코드의 특정 블록에있는 모든 오류 처리기를 비활성화합니다.
  2. Resume Next 는 오류가 발생할 때마다이 문이 Excel에 해당 오류를 무시하고 오류 메시지를 표시하지 않고 다음 코드 줄로 이동 (다음 다시 시작)하도록 지시합니다. 오류를 수정한다는 의미가 아니라 오류를 무시합니다.
  3. GoTo [label] 은 VBA에서 오류가 발생할 때마다 할당 된 레이블로 이동 함을 의미합니다. 이렇게하면 코드가 코더가 제공 한 특정 줄로 이동합니다.

VBA에서 오류를 처리하는 3 가지 주요 방법

여기에서이 VBA On Error 템플릿을 다운로드 할 수 있습니다 – VBA On Error 템플릿

# 1 – 오류시 다음 재개

20의 값을 0으로 나누고 나누기 결과를 할당하기 위해 변수를 선언했다고 가정합니다.

암호:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

이 코드를 실행하면 아래 오류가 발생합니다.

따라서 어떤 숫자도 0 값으로 나눌 수 없습니다. 런타임 오류 번호는 11 즉 0으로 나누기입니다.

이제 코드에 한 줄을 더 추가하겠습니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

이제 상단에 On error resume 문을 추가하겠습니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

이제이 코드를 실행하면 오류 메시지가 표시되지 않고 다음 코드 줄 (예 : j = 20/2)이 실행됩니다.

# 2 – On Error GoTo 레이블

세 가지 변수를 선언했습니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

이 세 변수 모두에 대해 나누기 계산을 할당합니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

이 세 가지 계산의 결과가 메시지 상자에 표시됩니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20 / 0 j = 20/2 k = 10/5 MsgBox "i의 값은"& i & vbNewLine & "j의 값은 "& j & _ vbNewLine &"k의 값은 "& k & vbNewLine End Sub 

이제 "I"의 계산이 적절하지 않기 때문에이 코드를 실행 해 보겠습니다. 런타임 오류 11이 발생합니다.

이제 "On Error Resume Next"문을 추가하겠습니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20 / 0 j = 20 / 2 k = 10/5 MsgBox "i의 값은"& i & vbNewLine & "The j의 값은 "& j & _ vbNewLine &"k의 값은 "& k & vbNewLine End Sub입니다. 

이것을 실행하면 "I"계산을 건너 뛰고 나머지 두 계산을 실행하며 결과는 다음과 같습니다.

이제 "On Error Resume Next"대신 "On Error GoTo KCalculation"을 추가합니다.

암호:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation : i = 20 / 0 j = 20 / 2 KCalculation : k = 10/5 MsgBox "The value of i is"& i & vbNewLine & "j의 값은"& j & _ vbNewLine & "k의 값은"& k & vbNewLine End Sub 

참고 : 여기서 "KCalculation"은 내가 지정한 레이블 이름입니다. 공백없이 고유 한 레이블 이름을 지정할 수 있습니다.

이제이 코드 줄을 실행하면 다음 줄로 이동하지 않고 내가 입력 한 레이블 이름 인 "KCalcualtion"으로 이동합니다. 여기서 "I"에 의해 주어진 오류를 무시하고 "j"계산을 실행하지 않고 바로 "KCalcualtion"으로 점프합니다.

# 3 – VBA에서 오류 번호 인쇄

코드 끝에서 별도의 메시지 상자에 오류 번호를 인쇄 할 수도 있습니다. 다음 코드 줄이이 작업을 수행합니다.

암호:

오류 번호

이제이 코드를 실행하겠습니다. 첫 번째 메시지 상자에 계산 결과가 표시됩니다.

확인을 클릭하면 오류 번호를 표시하는 메시지 상자가 하나 더 표시됩니다.

결과로 11이됩니다. 즉 Division by Zero입니다.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.