VBA

VBA 에러 처리하기

꼰대 부장 2025. 3. 12. 21:13

VBA(Visual Basic for Applications)에서는 코드 실행 중 발생할 수 있는 오류를 적절히 처리하여 프로그램이 정상적으로 동작하도록 만드는 것이 중요합니다. 이에 대한 주요 에러 처리 방법으로 On Error Resume Next, On Error GoTo Label, 그리고 에러 메시지를 표시하는 방법이 있습니다.

 1. On Error Resume Next

이 명령문은 코드 실행 중 오류가 발생하더라도 프로그램이 중단되지 않고 다음 줄로 계속 실행되도록 합니다. 주로 예상되는 오류를 무시하고 진행해야 할 때 사용됩니다.

예제 : 

Sub ResumeNextExample()
    Dim x As Integer, y As Integer, result As Integer
    x = 10
    y = 0
    
    On Error Resume Next ' 오류 발생 시 다음 줄로 이동
    result = x / y ' 0으로 나누기 오류 발생
    
    If Err.Number <> 0 Then
        MsgBox "오류 발생: " & Err.Description
        Err.Clear ' 오류 기록 초기화
    End If
    
    MsgBox "프로그램이 정상적으로 계속 실행됩니다."
End Sub

이 코드를 실행하면 0으로 나누기 오류가 발생하지만, 프로그램이 멈추지 않고 오류 메시지를 출력한 후 정상적으로 계속 실행됩니다.

 

 2. On Error GoTo Label

이 명령문은 오류가 발생하면 특정 라벨(Label)로 이동하여 오류를 처리하도록 합니다. 보다 체계적인 오류 처리가 필요할 때 사용됩니다.

예제 : 

Sub GoToLabelExample()
    Dim x As Integer, y As Integer, result As Integer
    x = 10
    y = 0
    
    On Error GoTo ErrorHandler ' 오류 발생 시 ErrorHandler로 이동
    result = x / y ' 0으로 나누기 오류 발생
    
    Exit Sub ' 오류가 없을 경우 ErrorHandler를 건너뜀
    
ErrorHandler:
    MsgBox "오류 발생: " & Err.Description
    Err.Clear ' 오류 기록 초기화
End Sub

위 코드에서는 0으로 나누기 오류가 발생하면 ErrorHandler: 라벨로 이동하여 오류 메시지를 출력하고, 이후 프로그램을 종료합니다.

 

 3. 에러 메시지 표시하는 방법

VBA에서 오류가 발생하면 Err 객체를 사용하여 오류 번호와 오류 메시지를 가져올 수 있습니다.

기본적인 오류 메시지 표시 방법 :

Sub ErrorMessageExample()
    On Error Resume Next
    Dim x As Integer
    x = 1 / 0 ' 오류 발생 (0으로 나누기)
    
    If Err.Number <> 0 Then
        MsgBox "오류 번호: " & Err.Number & vbCrLf & "오류 설명: " & Err.Description
        Err.Clear ' 오류 기록 초기화
    End If
End Sub

이 코드에서는 오류가 발생하면 Err.NumberErr.Description을 사용하여 메시지 박스에 오류 정보를 출력합니다.

 

 4. 정리

  • On Error Resume Next: 오류 발생 시 무시하고 다음 줄로 이동
  • On Error GoTo Label: 오류 발생 시 특정 라벨로 이동하여 오류 처리
  • Err.NumberErr.Description을 사용하여 오류 메시지를 표시하고 Err.Clear로 초기화

이러한 에러 처리 방법을 적절히 활용하면 VBA 코드의 안정성을 높이고, 예상치 못한 오류로 인한 프로그램 중단을 방지할 수 있습니다.

'VBA' 카테고리의 다른 글

VBA 셀(Cells)과 Range 속성과 활용  (0) 2025.03.29
VBA Do ~ While 문으로 반복  (0) 2025.03.07
VBA For Each.... Next 문  (0) 2025.03.05
VBA For ~ Next 문으로 반복 실행하기  (0) 2025.02.28
VBA Selet Case 문 사용법 및 예제  (0) 2025.02.15