2011-07-08 9 views
6

VBAコードがセル式(つまり「ユーザー定義関数」またはUDF)から呼び出されたとき、通常のVBAブレークオンエラーは、仕事。Excel:ブレークオンエラーがユーザー定義関数で機能しない

私はこの振る舞いを文書見つけることができる唯一の場所は記事の行のカップルが"Developing User-Defined Functions for Excel 2007 and Excel Services"と呼ばれる:

返す#VALUEエラーを処理エラー。 UDFコードによってスローされたすべての例外は、#VALUEエラーとしてExcelワークシートに戻されます。

エラートラップを「すべてのエラーでブレーク」に設定してコード**をシングルステップ実行しても、VBAランタイムエラーダイアログは表示されません.Excelは実行した内容を知らずに実行を放棄します。違う。もちろんこれにより、デバッグは必要以上に困難になります。

On Errorを含むいくつかの潜在的な回避策がありますが、エラーが発生した場所を特定するためにコードを乱雑にしないでください。

Break On Errorが正常に動作するように見落としたExcel/VBAオプションがありますか?私は私はそれがどんなではないことを承知しているセルから呼び出されたときにデバッガに入るための唯一の方法は、

答えて

2

をブレークポイントを設定したりStopステートメントを使用することです**エクセル2003に

を使用していますあなたが具体的に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のように使用するのが最適な方法です。あなたのコードの追加でそう

(これは繰り返しEscヒットどうなります)のUDFは、ほぼ継続的に実行するようresumeと無限ループに入るしないように注意する必要が

:あなたの関数の先頭付近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行をコメントアウトすることを忘れないでください。

関連する問題