VBA 예외 처리(On Error Goto 오류 레이블...)
(1) 프로세스 중에 오류가 발생할 수 있는 코드 행 앞에 오류 처리 명령문인 On Error Goto ErrHandler를 추가합니다. 여기서 "ErrHandler"는 사용자 정의 오류 레이블 이름입니다.
(2) 오류가 발생할 수 있는 코드 행 뒤에 오류 처리 취소 명령문인 On Error Goto 0을 추가하면 오류가 발생하면 지정된 오류 레이블로 이동하지 않고 [디버깅], [묶음] 등의 버튼이 있는 오류 프롬프트 창을 직접 표시합니다.
(3) 매크로의 끝(일반 프로그램의 끝)에 코드 행 Exit Sub을 추가하여 프로그램의 오류가 발생하지 않았을 때 오류 처리 프로그램을 실행하지 않도록 합니다.
(4) 코드 행 Exit Sub의 다음 행에 "MyErr:"등의 이름과 콜론으로 구성된 오류 레이블을 추가합니다.
(5) 오류 레이블의 다음 행에 오류 처리 코드를 작성합니다.오류를 일으킨 코드 행 뒤에 있는 코드 행을 반환하려면 Resume Next 문을 사용합니다.
참고: 프로세스의 끝에 여러 개의 오류 처리 프로그램을 추가할 수 있지만 각 오류 처리 프로그램이 현재 오류 프로그램 이후의 오류 처리 프로세스를 계속하지 않도록 하려면 Resume Next 또는 Exit Sub 문구로 끝나야 합니다.
간단한 예를 들면 위에서 말한 내용을 더욱 직관적으로 반영할 수 있다.다음 코드에서 워크북에 지정된 작업표가 없는 것을 발견하면 오류가 발생하고 오류 코드를 실행하며 오류 번호와 오류 설명을 포함하는 대화상자를 표시합니다.
1 Sub ()
2
3 Dim wksname As String, msg As String
4
5 On Error GoTo MyErr
6
7 wksName = Worksheets("sx").Name
8
9 MyErr:
10
11 msg = " " & Err.Number & " : " & Err.Description
12
13 MsgBox msg
14
15 End Sub
참고: 문제를 일으킨 코드 행 앞에 On Error Resume Next 문구를 사용하든 "On Error Goto 태그"문구를 사용하든 프로그램이 다른 오류 정보를 다시 가져오려면 문제를 일으킨 코드 행 뒤에 On Error Goto 0 문구를 사용하여 정상적인 오류 캡처 상태를 복원해야 합니다.그렇지 않으면 현재 오류 처리 프로그램이 뒤의 모든 오류에 영향을 미칠 것입니다.예를 들어, 다음 코드는 On Error Goto 0 문을 사용하지 않으므로 뒤에 오류가 발생할 때(x/y 두 번) 태그 MyErr로 이동하여 오류 처리 프로그램을 실행합니다.
Sub ErrTest()
Dim x As Integer, y As Integer, z As Single
x = 1
y = 0
On Error GoTo MyErr
MsgBox x / y
MsgBox x / y
MsgBox " "
Exit Sub
MyErr:
MsgBox " 1 : 0"
Resume Next
End Sub
다음 코드는 On Error Goto 0 문을 적시에 사용했기 때문에 두 번째 오류가 발생했을 때(즉 두 번째 x/y) MyErr 탭을 실행하는 코드가 아닌 내장된 오류 메시지가 표시됩니다.
1 Sub ErrTest1()
2
3 Dim x As Integer, y As Integer, z As Single
4
5 x = 1
6
7 y = 0
8
9 On Error GoTo MyErr
10
11 MsgBox x / y
12
13 On Error GoTo 0
14
15 MsgBox x / y
16
17 MsgBox " "
18
19 Exit Sub
20
21 MyErr:
22
23 MsgBox " 1 : 0"
24
25 Resume Next
26
27 End Sub
아래 코드는 On Error Goto 0 문을 사용하지 않았지만 두 번째 오류가 발생하기 전에 두 번째 오류 레이블이 추가되어 두 개의 오류 처리 프로그램이 각각의 오류를 처리합니다.
1 Sub ErrTest2()
2
3 Dim x As Integer, y As Integer, z As Single
4
5 x = 1
6
7 y = 0
8
9 On Error GoTo MyErr1
10
11 MsgBox x / y
12
13 On Error GoTo MyErr2
14
15 MsgBox x / y
16
17 MsgBox " "
18
19 Exit Sub
20
21 MyErr1:
22
23 MsgBox " 1 : 0"
24
25 Resume Next
26
27 MyErr2:
28
29 MsgBox " 2 : 0"
30
31 Resume Next
32
33 End Sub
상기 3단 코드는 오류 처리 프로그램을 실행한 후 오류가 발생한 코드로 되돌아와 계속 실행됩니다.이 예에서는 오류 처리 프로그램을 실행한 후에도 "MsgBox"오류 코드 행의 다음 행 코드 계속 실행"코드 행을 계속 실행합니다.
프로그램이 실행될 때 오류가 발생하는 것을 원하지 않지만, 때때로 우리는 오류를 이용하여 코드의 효율을 높일 수 있다.예를 들어 사용자가 어떤 이유로 워크북의 워크시트를 삭제할 때 VBA 프로그램에 워크시트를 조작하는 코드가 포함되면 사용자가 이 프로그램을 실행할 때 오류가 발생할 수 있습니다.이 때, 오류를 이용하여 작업표가 작업장에 존재하는지 검사할 수 있습니다.코드는 다음과 같습니다.
1 Sub ()
2
3 Dim WksName As String
4
5 On Error Resume Next
6
7 WksName = Worksheets("sx").Name
8
9 If Err.Number <> 0 Then
10
11 MsgBox prompt:=" sx", Title:=" "
12
13 End If
14
15 On Error GoTo 0
16
17 End Sub
참고: On Error Resume Next 문을 사용한 후에는 오류가 발생할 수 있는 코드 행 이후에 On Error Goto 0 문을 사용하여 오류 캡처, 즉 오류 검사의 정상 상태로 복원하여 발생할 수 있는 다른 오류를 알 수 있도록 해야 합니다.또한 On Error Resume Next 문을 사용하여 무시할 수 없는 오류를 무시하면 현재 실행 중인 프로세스가 즉시 종료됩니다.더 심각한 것은 매크로 1이 매크로 2를 호출했지만 매크로 2에 무시할 수 없는 오류가 발생하면 매크로 2의 실행을 즉시 끝내고 매크로 1의 다음 줄 코드를 계속 실행합니다. 이런 경우 전체 코드에 예측할 수 없는 오류가 포함될 수 있으므로 조심해야 합니다.
Resume 문
오류 처리 프로그램이 끝난 후에 원래의 운행을 회복합니다.
문장
묘사
Resume
오류와 오류 처리 프로그램이 같은 과정에 나타나면 오류가 발생한 문장에서 다시 실행됩니다.호출되는 과정에서 오류가 발생하면, 오류 처리 프로그램을 포함하는 최근 호출된 문장에서 실행을 복원합니다
Resume Next
오류와 오류 처리 프로그램이 같은 프로그램에 나타나면 오류가 발생한 문장을 뒤따르는 다음 문장에서 다시 실행됩니다.호출되는 동안 오류가 발생하면 오류 처리 프로그램을 포함하는 마지막 프로세스가 포함된 명령문(또는 On Error Resume Next 명령문)이 해당 명령문 바로 뒤에 오는 명령문에서 다시 실행됩니다.
Resume line
필요한 라인 매개 변수가 지정한 라인에서 실행을 회복합니다.라인 매개 변수는 줄 탭이나 줄 번호입니다. 오류 처리 프로그램과 같은 과정에 있어야 합니다.
On Error 문에서 오류 처리 프로그램을 시작하고 하위 프로그램의 위치를 지정합니다.오류 처리 프로그램을 금지하는 데도 사용할 수 있습니다.
문장
묘사
On Error GoTo line
오류 처리 프로그램을 시작하고, 이 절차는 필요한 라인 매개 변수에서 지정한 라인에서 시작합니다.라인 매개 변수는 모든 줄 라벨이나 줄 번호일 수 있습니다.실행 중 오류가 발생하면 컨트롤이 라인으로 넘어가 오류 처리 프로그램을 활성화합니다.지정된 line은 On Error 문과 동일한 프로세스 중 하나여야 합니다.그렇지 않으면 컴파일 시간 오류가 발생할 수 있습니다.
On Error Resume Next
실행 중 오류가 발생했을 때 컨트롤이 오류가 발생한 문장 다음에 있는 문장으로 넘어가 계속 실행된다는 것을 설명합니다.On Error GoTo 대신 객체에 액세스할 때 이 형식을 사용합니다.
On Error GoTo 0
현재 프로세스에서 시작된 오류 처리 프로그램을 금지합니다.
오류 처리 프로그램은 Err 객체의 Number 속성 값을 기준으로 오류 발생 원인을 결정합니다.다른 오류가 발생하기 전이나 오류가 발생할 수 있는 프로세스를 호출하기 전에 오류 처리 프로그램은 먼저 Err 객체의 관련 속성 값을 테스트하거나 저장해야 합니다.Err 객체의 속성 값은 최근에 발생한 오류만 반영합니다.Err.Description에는 Err.Number와 연관된 오류 정보입니다.
On Error GoTo 0은(는) 현재 프로세스 중 오류 처리를 중지합니다.비록 과정 중에 0의 줄이 포함되어 있더라도, 줄 0은 오류를 처리하는 코드의 시작점으로 지정하지 않는다.On Error GoTo 0 문이 없으면 프로세스를 종료할 때 오류 처리 프로그램이 자동으로 닫힙니다.
발췌:https://blog.csdn.net/daihongliu/article/details/78285088
전재 대상:https://www.cnblogs.com/maol986162214/p/11128415.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.