프로젝트 및 실습/VBA

[VBA] Error Handling

jooona 2022. 8. 3. 19:54
반응형

개발을 하다 보면 필연적으로 마주할 수밖에 없는 문제 중 하나가 Error죠. VBA에서는 Error와 마주쳤을 때 대응할 수 있는 경우의 수가 두 가지 있습니다.

 

1. Error를 무시하고 계속해서 진행한다.

2. 별도 구현된 Error Handling Section으로 이동한다.

 

각 경우에 대해 어떻게 구현할 수 있는지 알아보도록 하겠습니다.

 

 

1. Error를 무시하고 계속해서 진행한다.

 

기본적으로 다음의 코드를 통해 Error를 무시하고 진행할 수 있습니다. 해당 구문 다음에 오는 코드는 Error가 발생하더라도 프로그램이 종료되지 않고 다음 코드로 넘어가게 됩니다.

 

On Error Resume Next

 

예시를 한 번 들어보겠습니다. 가장 쉽게 발생시킬 수 있는 에러가 정수를 0으로 나누는 것이죠. 한 번 실행해 보겠습니다.

 

Sub Error_Ignore()
    
    On Error Resume Next
    MsgBox 10 / 0
    
    MsgBox "Finish"
    
End Sub

 

만일 On Error Resume Next가 없다면 'MsgBox 10 / 0'에서 오류가 발생하여 프로그램이 종료될 것입니다. 하지만 On Error Resume Next가 있다면?

 

 

Error는 발생했겠지만, 해당 구문을 뛰어넘어 Finish를 출력하는 MsgBox를 띄워주게 됩니다.

 

 

 

2. 별도 구현된 Error Handling Section으로 이동한다.

 

 

Error 처리를 구현하고 싶다면 다음과 같이 작성하면 됩니다.

 

Sub Error_Handling()
    
    On Error GoTo ErrorHandler
    MsgBox 10 / 0
    Exit Sub
    
ErrorHandler:
    MsgBox "Error Occurred"

End Sub

 

On Error GoTo 구문은 아래의 코드에서 Error가 발생했을 때 GoTo 뒤에 명시된 Section으로 이동하도록 해줍니다.

 

위의 코드를 실행해보면 10을 0으로 나누는 구문에서 Error가 발생했기 때문에 GoTo 옆에 명시된 ErrorHandler Section으로 Jump 하게 되고, "Error is Occured"라는 메시지가 출력됩니다.

 

 

 

3. Error 내용 확인

 

 

어떤  Error가 발생했는지 궁금하다면 다음과 같이 확인할 수 있습니다.

 

Sub Error_Ignore()
    
    On Error Resume Next
    MsgBox 10 / 0
    MsgBox "Error Code " & Err & ": " & Error(Err.Number)
    
    MsgBox "Finish"
    
End Sub

 

Error가 발생하면 그 정보가 Err라는 객체에 담기게 되기 때문에 해당 Error의 내용을 출력해줄 수 있습니다.

 

 

Error 코드의 목록은 다음과 같습니다.

 

 

Reference: Excel 2010 Power Programming With VBA / John Walkenbach

반응형

'프로젝트 및 실습 > VBA' 카테고리의 다른 글

[VBA] ParamArray  (0) 2022.08.05
[VBA] IIf Function  (0) 2022.08.04
[VBA] MsgBox 사용법  (0) 2022.08.03
[VBA] Optional Arguments  (0) 2022.08.02
[VBA] Do While과 Do Until  (0) 2022.08.02