在vba 偵錯入門一文中,透過resume 方式找到那一行指令有誤,但!!!!
很多時候其實是來源資料的問題說,這時候該怎辦呢!
小編 自己小小經驗是 做自動除錯功能來讓工作更順利。
但滿多教科書都是以資料要優先處理後,確認資料無異常後,方執行執行程式的。
小編 僅是分享一點自己在debug的經驗歐,供作參考。
example4:
on error goto line1
a = 1
b = 0
c = a / b
line1:
MsgBox Err.Description & ";" & Err.Number '這行筆者加的,讓錯誤變成對話框內容
DEBUG.PRINT Err.Description & ";" & Err.Number '這行筆者加的,讓錯誤顯示在即時運算畫面當中。
RESUME ' '這行筆者加的的目的,是要顯示錯誤行別 記得要點反紅點
更新成自動除錯版:
example4:
On Error GoTo line1
a = 1
b = 0
c = a / b
line2:
Exit Sub
line1:
If Err.Number = 11 Then
If b = 0 Then
c = "error"
On Error GoTo 0
GoTo line2
End If
End If
但這邊問題還是會衍生一些小問題存在的,有測試就知道。
先賣關子,後面會有解說
所以當a與b都變成是陣列變數時,就可以快速帶入error的判斷在資料集中,不會因為一筆資料就需要重新debug了。
自動除錯 在升級,前面有提到賣關子 ㄏㄏ
其實前面提的方式有一個小缺點就是錯誤僅能產生一次,第二次產生時就會失效!!!
那怎辦?
思考運算改成單獨SUB,每一個獨立的SUB其實都是個體戶,每次重新呼叫都是一個新的個體,當執行結束後,會從記憶體中洗掉,來看看怎做。
example4:
on error goto line1
a = 1
b = 0
c = a / b
line1:
MsgBox Err.Description & ";" & Err.Number '這行筆者加的,讓錯誤變成對話框內容
DEBUG.PRINT Err.Description & ";" & Err.Number '這行筆者加的,讓錯誤顯示在即時運算畫面當中。
RESUME ' '這行筆者加的的目的,是要顯示錯誤行別 記得要點反紅點
更新成自動除錯版:
example4:
Sub A1()
A = Array(0, 1, 2, 3, 4, 5, 6, 7)
B = Array(0, 1, 2, 3, 4, 5, 6, 7)
For I = 0 To 6 Step 1
Call A2(A(I), B(I), I)
Next I
End Sub
Sub A2(A, B, I)
On Error GoTo line1
C(I) = A / B
Exit Sub
line1:
C(I) = "error"
End Sub
範例如上操作,把錯誤留給可以擦掉的白板 XD
簡單說明:
SUB A1丟資料給SUB A2計算,當出現錯誤,就用ERROR寫入C陣列中,嚴格說起來也不算除錯,以上。
沒有留言:
張貼留言