VBA-오류 처리

프로그래밍 오류에는 (a) 구문 오류, (b) 런타임 오류 및 (c) 논리적 오류의 세 가지 유형이 있습니다.

구문 오류

구문 오류라고도하는 구문 오류는 VBScript의 해석 시간에 발생합니다. 예를 들어 다음 줄은 닫는 괄호가 없기 때문에 구문 오류가 발생합니다.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

런타임 오류

예외라고도하는 런타임 오류는 해석 후 실행 중에 발생합니다.

예를 들어 다음 줄은 구문이 정확하지만 런타임에 존재하지 않는 함수 인 fnmultiply를 호출하려고하므로 런타임 오류가 발생합니다.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

논리적 오류

논리적 오류는 추적하기 가장 어려운 유형의 오류 일 수 있습니다. 이러한 오류는 구문 또는 런타임 오류의 결과가 아닙니다. 대신 스크립트를 구동하는 논리에 실수를하여 예상 한 결과를 얻지 못할 때 발생합니다.

이러한 오류는 비즈니스 요구 사항에 따라 프로그램에 넣을 논리 유형에 따라 다르기 때문에 포착 할 수 없습니다.

예를 들어 숫자를 0으로 나누거나 무한 루프에 들어가는 스크립트를 작성합니다.

Err 개체

런타임 오류가 있다고 가정하면 오류 메시지를 표시하여 실행이 중지됩니다. 개발자로서 오류를 캡처하려면Error 개체가 사용됩니다.

예

다음 예에서 Err.Number 오류 번호를 제공하고 Err.Description 오류 설명을 제공합니다.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

오류 처리

VBA는 오류 처리 루틴을 활성화하고 오류 처리 루틴을 비활성화하는 데 사용할 수도 있습니다. On Error 문이 없으면 발생하는 모든 런타임 오류는 치명적입니다. 오류 메시지가 표시되고 실행이 갑자기 중지됩니다.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr. 아니. 키워드 및 설명
1

GoTo line

필수 라인 인수에 지정된 라인에서 시작하는 오류 처리 루틴을 활성화합니다. 지정된 줄은 On Error 문과 동일한 절차에 있어야합니다. 그렇지 않으면 컴파일 타임 오류가 발생합니다.

2

GoTo 0

현재 프로 시저에서 활성화 된 오류 처리기를 비활성화하고 Nothing으로 재설정합니다.

삼

GoTo -1

현재 프로 시저에서 활성화 된 예외를 비활성화하고 Nothing으로 재설정합니다.

4

Resume Next

런타임 오류가 발생하면 제어가 오류가 발생한 명령문 바로 다음 명령문으로 이동하고 해당 지점부터 실행이 계속되도록 지정합니다.

예

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub