標題:
[發問]
VBA有辦法顯示"哪一行"錯誤並加以記錄嗎?
[打印本頁]
作者:
PKKO
時間:
2014-11-22 00:04
標題:
VBA有辦法顯示"哪一行"錯誤並加以記錄嗎?
假設A不懂VBA,B為撰寫者
但A操作此巨集有問題
Sub test()
Workbooks.Open ("C:\表1.xlsm")
Workbooks.Open ("C:\表2.xlsm")
Workbooks.Open ("C:\表3.xlsm")
Workbooks.Open ("C:\表4.xlsm")
End Sub
複製代碼
有辦法準確的得知哪一行錯誤嗎?
就可以加以紀錄在某sheet內,待程式撰寫者處理?
ex:sheets("Sheet1").range("a1").value= "錯誤的那行程式碼" or 錯誤的程式碼為第幾行
或是可透過何種方法達成相同效果,(A操作有問題,B不必重新操作即可透過程式得知發生的問題)
作者:
luhpro
時間:
2014-11-22 00:40
本帖最後由 luhpro 於 2014-11-22 00:45 編輯
假設A不懂VBA,B為撰寫者
但A操作此巨集有問題有辦法準確的得知哪一行錯誤嗎?
就可以加以紀錄在某sheet內, ...
PKKO 發表於 2014-11-22 00:04
Sub test()
Dim iI%
Dim sFlNm()
On Error GoTo ErrHand
sFlNm = Array("C:\表1.xlsm", "C:\表2.xlsm", "C:\表3.xlsm", "C:\表4.xlsm")
For iI = 0 To UBound(sFlNm)
Workbooks.Open sFlNm(iI)
Next
Exit Sub
ErrHand:
sheets("Sheet1").range("a1")= sFlNm(iI)
Resume Next
End Sub
複製代碼
Sub test()
Dim iI%
Dim sFlNm()
On Error GoTo ErrHand
sFlNm = "C:\表1.xlsm"
Workbooks.Open sFlNm
sFlNm = "C:\表2.xlsm"
Workbooks.Open sFlNm
sFlNm = "C:\表3.xlsm"
Workbooks.Open sFlNm
sFlNm = "C:\表4.xlsm"
Workbooks.Open sFlNm
Exit Sub
ErrHand:
sheets("Sheet1").range("a1")= sFlNm
Resume Next
End Sub
複製代碼
作者:
PKKO
時間:
2014-11-22 02:01
回復
2#
luhpro
luhpro 大您好,感謝您的回覆,可能是我主題的部分表達的不清楚
若程式有三百行,或是互相呼叫N個巨集,不太可能用上述的方式撰寫
有其他方式可達成相同效果嗎?
還是說~程式撰寫,本來就要像大大一樣每行都設定偵錯,才有辦法知道哪邊錯誤~?
作者:
luhpro
時間:
2014-11-22 14:44
回復
3#
PKKO
程式撰寫,本來就要像大大一樣每行都設定偵錯,才有辦法知道哪邊錯誤~? <===
據我所知 Excel VBA 本身似乎並沒有提供抓取現在執行到第幾列指令之類的函式或系統變數,
這可從系統錯誤訊息只會秀錯誤代碼與錯誤原因來得知.
雖然有單步偵錯模式可以追蹤,
但有時單步模式與實際執行情形還是會有落差.
所以這部分我覺得可能還是要程式設計師自己定義辨別的方式,
最簡單的方法是在每個問題可能發生的關鍵點之前將判斷變數內容設定好,
這樣錯誤處理區才能提供相關訊息(或是顯示相關訊息後, 直接用 Resume Next 略過錯誤)給程式設計師.
實務上我是建議多參考2#中第一種方式將程式簡化,
利用各種方式把相似功能整合在一起處理,
而非純粹用條列循序的方式執行程式,
這樣會比較容易修改及調整程式.
作者:
PKKO
時間:
2014-11-22 19:39
回復
4#
luhpro
感謝大大!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)