2011-07-08 71 views
6

看起來,當從單元格公式(即「用戶定義的函數」或UDF)調用VBA代碼時,通常的VBA Break On Error doesn'工作。Excel:在錯誤時中斷不起作用於用戶定義的函數

我能找到這種行爲記錄的唯一的地方是在一篇文章中幾行稱爲"Developing User-Defined Functions for Excel 2007 and Excel Services"

錯誤處理返回#VALUE錯誤。由UDF代碼拋出的所有異常都以#VALUE錯誤的形式返回到Excel工作表中。

即使您設置錯誤捕獲到「斷開所有錯誤」和單步執行代碼**,你永遠不會看到在VBA運行時錯誤對話框 - Excel中只是靜靜地放棄執行不告訴你了什麼錯誤。當然,這使得調試比需要的更困難。

有一些潛在的解決方法,涉及On Error,但我寧願不亂拋我的代碼只是爲了找出錯誤發生的地方。

是否有一些Excel/VBA選項我忽略了哪些會使Break On Error正常工作?我使用Excel 2003中

**只有這樣,才能進入調試器從細胞叫時,設置一個斷點,或者使用Stop聲明

回答

2

我知道,這不是任何有趣的是,當你專門詢問On Error以外的其他東西時聽到這個消息,但恐怕這是我知道的唯一選擇。

您可以在調試時使用On Error Goto ErrorHandler(並在其他時間將其註釋掉以獲取默認On Error Goto 0)。該ErrorHandler可能只是幾行,因此不會弄亂你的代碼太多:

ErrorHandler: 
    MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description 
    Resume 

總是與Resume斷點來指導你回踏時的錯誤造成的語句 - 和避免無限的錯誤處理循環。

2

最好的方法是使用On Error GoTo ErrorHandlerStop參考,然後是Resume

需要小心不要陷入無限循環與resume作爲UDF運行幾乎不斷(如果發生這種情況屢屢創下Esc

因此,在你的代碼添加:On Error GoTo ErrorHandler你的函數,然後右鍵附近開始在End Function之前結束:

Exit Function 
ErrorHandler: 
MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description 
Stop 
Resume 

Exit Function的停止這個碼在正常操作運行。 如果遇到錯誤,將彈出一個包含詳細信息的消息框,代碼將中斷(由於Stop),您可以使用調試工具欄上的下一行命令逐步回到代碼中(通過resume語句跳回) 。

當然,當你對UDF滿意時,不要忘記將On Error GoTo ErrorHandler行註釋掉。

相關問題