Microsoft Excel VBA의 오류 문
Excel VBA는 개발자에게 다양한 기능을 제공합니다. 이 기사에서는 VBA의 On Error
문에 대해 알아봅니다.
VBA의 오류 발생
문은 무엇입니까
VBA의 On Error
문은 오류 발생 시 다음에 수행할 작업에 대해 컴파일러에 지시하는 데 사용됩니다. VBA 코드에서 오류 처리를 수행하는 방법입니다.
오류 처리는 오류가 발생하기 전에 예상하고 해결하는 프로세스입니다. 이것은 코드가 실행되는 동안 발생하는 런타임 오류(예: 존재하지 않는 Excel의 통합 문서 참조)에 대해 일반적으로 수행됩니다.
이러한 오류는 코드 실행을 중단시키는 예외를 발생시킵니다. 따라서 이를 방지하려면 오류를 생성할 수 있는 코드 조각을 예상하고 적절한 오류 처리를 수행해야 합니다.
Excel VBA에서 예외를 처리하는 쉬운 방법 중 하나는 On Error
문을 사용하는 것입니다. VBA에는 다음 구문을 갖는 세 가지 유형의 오류 발생
문이 있습니다.
오류 시 GoTo 0
오류 시 <label>로 이동
오류 발생 시 다음 재개
하나씩 설명하겠습니다.
오류 시 0으로 이동
On Error Goto 0
문은 VBA의 기본 작업을 사용하여 예외가 발생할 때 표준 오류 메시지를 표시하기 때문에 오류 처리가 없는 것과 같습니다. 오류 메시지에는 런타임 오류의 유형과 이름 및 관련 번호가 표시됩니다.
또한 코드로 다음에 수행할 작업에 대한 몇 가지 옵션을 사용자에게 제공합니다. 이러한 옵션은 다음과 같습니다.
계속
: 이 옵션을 누르면 오류를 무시하고 코드를 계속합니다. 그러나 매번 그렇게 하는 것은 불가능하며 실행을 계속할 수 없을 때 옵션이 회색으로 표시되고 비대화형이 됩니다.종료
: 이 옵션은 프로그램을 종료하고 실행을 종료합니다.디버그
: 이 옵션은 코드를 디버그하여 오류의 원인을 찾아 해결하는 데 도움이 됩니다. 이 버튼을 누르면 예외가 발생한 줄부터 시작하여 프로그램이 디버그 모드로 전환됩니다.도움말
: 이 옵션은 예외에 대한 정보를 제공하는 Microsoft의 공식 도움말 페이지로 사용자를 안내합니다.
활성 통합 문서 목록에 Book1.xlsx
가 없으면 오류가 발생하는 다음 코드를 실행해 보겠습니다.
Sub ExampleGoto0()
On Error GoTo 0
Workbooks("Book1.xlsx").SaveAs
End Sub
오류가 발생하면 다음 메시지 상자가 표시됩니다.
오류 시 <label>로 이동
On Error Goto <label>
문은 예외가 발생할 때 코드의 특정 줄로 이동하도록 컴파일러에 지시하여 오류 처리를 Goto
문과 결합합니다.
행은 행 번호 또는 레이블로 지정됩니다. 오류가 발생하면 프로그램 제어는 라벨이 뒤따르는 줄로 이동하여 그 사이에 작성된 모든 코드를 건너뜁니다.
레이블은 다음 구문을 사용하여 VBA에서 선언됩니다.
labelname:
참고:
Goto
문에 지정된 라인 또는 레이블은On Error Goto
문과 동일한 절차에 있어야 합니다. 그렇지 않으면 컴파일 타임 오류가 생성됩니다.
오류가 발생하면 레이블을 사용하여 특정 줄로 이동하는 방법을 살펴보겠습니다.
Sub ExampleGotoLabel()
On Error GoTo errorhandler
Workbooks("Book1.xlsm").SaveAs
MsgBox "This line will not be executed"
Exit Sub
errorhandler:
Range("A1") = "Error handled"
End Sub
참고: 오류가 없는 경우에도 레이블 바로 뒤에 있는 줄이 매번 실행되지 않도록 하려면 레이블 바로 앞에
Exit Sub
명령을 사용해야 합니다.
오류 시 다음 재개
On Error Resume Next
문은 오류가 발생한 줄을 건너뛰고 바로 다음 줄부터 실행을 계속합니다. 이 문은 오류를 처리하거나 해결하지 않는다는 점에 유의해야 합니다. 오히려 코드에 존재하지 않는 것처럼 잘못된 명령문을 무시합니다.
따라서 On Error Resume Next
문은 올바르게 구현되지 않으면 매우 까다로울 수 있습니다. 변수 초기화와 같이 실행될 코드에 필수적인 일부 라인을 건너뛸 수 있기 때문입니다.
이러한 상황을 처리하기 위해 우리는 모든 예외를 추적하는 Err
개체의 Err.Number
속성을 사용합니다.
예외가 발생하면 Err.Number
에 일부 값이 할당됩니다. 그렇지 않으면 0
으로 설정됩니다. 이 정보는 모든 예외를 추적하고 그에 따라 오류 처리를 수행할 수 있습니다.
참고: 개체 작업 시
On Error Goto
대신On Error Resume Next
문을 사용하는 것이 좋습니다.
존재하지 않는 통합 문서를 저장하려고 하면 예외가 발생하는 다음 코드를 살펴보겠습니다. On Error Resume Next
문으로 인해 잘못된 문은 무시됩니다.
Sub ExampleResumeNext1()
On Error Resume Next
Workbooks("Book1.xlsx").Save
Range("A1") = "Error skipped"
End Sub
이제 Err.Number
속성을 사용하여 코드 줄을 건너뛰는 것이 해로울 수 있는 상황을 처리하는 또 다른 예를 살펴보겠습니다.
Sub ExampleResumeNext2()
On Error Resume Next
N = 1 / 0 ' This line will cause an exception because of division by zero
If Err.Number <> 0 Then
N = 1 ' Some default value of N, so that it is not used uninitialized in the following lines
End If
For i = 1 To N
Range("A1") = i
Next i
End Sub
결론
이것은 Microsoft Office 사용자의 소중한 시간을 절약해 주는 유용한 프로그래밍 언어인 VBA의 오류 시
문에 대한 논의를 요약한 것입니다. On Error
문이 오류 처리에 사용되는 다양한 방법을 배웠기를 바랍니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub