對于On Error Goto 陳述句
MSDN 中 是這么解釋的:
如果在錯誤處理程式處于活動狀態時(在發生錯誤和執行 Resume、Exit Sub、Exit Function 或 Exit Property 陳述句之間這段時間)又發生錯誤,則當前程序的錯誤處理程式將無法處理這個錯誤。
那么問題在于,若我需要在一個函式中需要連續多次使用On errorGoto 陳述句進行錯誤情況的跳轉時候,第二次開始的就無法按照要求跳轉。譬如原有的代碼結果如下:
On error Goto Lable1
' 陳述句1-3 處理 物件1, 可能會因為物件1的不同屬性而出錯,出錯時候希望跳轉到陳述句11,開始處理物件2
陳述句 1
陳述句 2
陳述句 3
Lable1:
on error goto Lable2
' 陳述句11-13 處理 物件2, 可能會因為物件2的不同屬性而出錯
陳述句 11
陳述句 12
陳述句 13
Lable2:
on error goto Lable3
' 陳述句21-23 處理 物件3, 可能會因為物件3的不同屬性而出錯
陳述句 21
陳述句 22
陳述句 23
************************
總體的思路:
就是當處理物件1時若出錯,就跳轉到處理物件2處理,若處理物件2出錯,就跳轉到物件3處理。
但是問題在于,On error goto 陳述句在處理第一次出錯后,后續就不管用了,當物件1出錯跳轉后,
就無法處理物件2的錯誤跳轉。整個程式就卡在那里。
請問各位前輩,要如何處理。
處理各個物件的情況比較復雜,所以沒辦法事先判斷在哪里可能會出錯。當然可能出錯的情況
在程式中都盡可能的考慮到。
這樣一種邏輯結構要如何處理。謝謝。
uj5u.com熱心網友回復:
你在label1下面寫err.clear試試看
uj5u.com熱心網友回復:
可以適當考慮on error resume next.....uj5u.com熱心網友回復:
試過了,沒有用
err.clear 只能把 err 的值給清零,但是好像不能在其內部的中斷機制給復位
uj5u.com熱心網友回復:
也曾考慮過這種寫法,
加上 if (err.num <> 0 ) then ....
else ....
這樣的寫法。但是能力有限,一直沒有想到最終的方法
uj5u.com熱心網友回復:
個人感覺沒有必要對所有潛在的錯誤都進行處理............uj5u.com熱心網友回復:
Private Sub Command1_Click()
Dim iProgress As Long '區分不同的步驟
Dim obj1 As Object
Dim obj2 As Object
Dim obj3 As Object
Dim i As Long
On Error GoTo ErrHandler
iProgress = 1
i = 100 / obj1.length
Step2:
iProgress = 2
Set obj2 = New Collection
i = 100 / obj2.length
Step3:
iProgress = 3
Set obj3 = New Collection
i = 100 / obj3.Count
MsgBox "總算有成功的!"
ExitEntry:
Exit Sub
ErrHandler:
Debug.Print iProgress, Err.Number, Err.Description
Select Case iProgress
Case 1
Resume Step2
Case 2
Resume Step3
End Select
MsgBox "全部出錯了!"
Resume ExitEntry
End Sub
uj5u.com熱心網友回復:
加上On Error Goto 0或者用Resumeuj5u.com熱心網友回復:
Option Explicit
Private Sub Command1_Click()
On Error GoTo l2
l1:
Debug.Print "l1"
Debug.Print 1 / 0
Exit Sub
l2:
On Error GoTo -1
On Error GoTo l3
Debug.Print "l2"
Debug.Print 1 / 0
Exit Sub
l3:
On Error GoTo -1
On Error GoTo l3
Debug.Print "l3"
Debug.Print 1 / 0
stop
End Sub
uj5u.com熱心網友回復:
on error resume next + err.number值判斷,例如:on error resume next
陳述句1
if err.number<>0 then
err.clear
goto label1
end if
陳述句2
if err.number<>0 then
err.clear
goto label1
end if
……
goto exitlabel
label1:
陳述句11
if err.number<>0 then
err.clear
goto label2
end if
陳述句12
if err.number<>0 then
err.clear
goto label2
end if
……
exitlabel:
uj5u.com熱心網友回復:
#6說得不錯,另外,這個問題我前一陣還專門發帖解釋過:http://bbs.csdn.net/topics/390803908
[推薦] [原創技術分享]VB6錯誤處理進階(同程序中多次錯誤處理)
uj5u.com熱心網友回復:
在錯誤處理中呼叫另一個Sub,在這個Sub中再On Erroruj5u.com熱心網友回復:
在錯誤中處理錯誤的例子。。。
不過,這個是會有異議的
Option Explicit
Private Sub Command1_Click()
l1:
On Error GoTo -1
On Error GoTo l2
Debug.Print "l1"
Debug.Print 1 / 0
Exit Sub
l2:
On Error GoTo -1
On Error GoTo l3
Debug.Print "l2"
Debug.Print 1 / 0
Exit Sub
l3:
On Error GoTo -1
On Error GoTo l4
Debug.Print "l3"
Debug.Print 1 / 0
l4:
On Error GoTo -1
On Error GoTo l5
Debug.Print "l4"
Debug.Print 1 / 0
l5:
On Error GoTo -1
On Error GoTo l1
Debug.Print "l5"
Debug.Print 1 / 0
Stop
End Sub
uj5u.com熱心網友回復:
On error本來就是讓你除錯原始碼用的, 考慮得周全一些, 代碼寫得健壯了, 就不會有你這種問題了.uj5u.com熱心網友回復:
正解!
uj5u.com熱心網友回復:
看了10樓版主bcrun的帖子后,改成這樣了,請各位大大看看能行不?On error Goto Lable1
' 陳述句1-3 處理 物件1, 可能會因為物件1的不同屬性而出錯,出錯時候希望跳轉到陳述句11,開始處理物件2
陳述句 1
陳述句 2
陳述句 3
Lable1:
Resume test1
test1:
on error goto Lable2
' 陳述句11-13 處理 物件2, 可能會因為物件2的不同屬性而出錯
陳述句 11
陳述句 12
陳述句 13
Lable2:
Resume test2
test2:
on error goto Lable3
' 陳述句21-23 處理 物件3, 可能會因為物件3的不同屬性而出錯
陳述句 21
陳述句 22
陳述句 23
************************
其實就是人為的增加一個 resume陳述句,測驗了一下,似乎可以,就不知道是否會有什么潛在的錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112428.html
標籤:VB基礎類
上一篇:VB.NET開一個執行緒去處理資料傳輸任務,(rs232通訊),資料量較大,主界面卡死,請牛牛們指教。
下一篇:VB 代碼 請大神 指教
