| ■103698 / ) |
Re[1]: エラー処理について |
□投稿者/ 魔界の仮面弁士 (3848回)-(2025/05/28(Wed) 10:00:14)
|
2025/05/28(Wed) 10:05:45 編集(投稿者)
(書いているうちに No103696, No103697 が投稿されていたようで…)
■No103695 (マクベス さん) に返信 > プログラム中にエラーが発生するとエラー処理を行うために > On Error GoTo *** > を追加します。
投稿時の分類が、 > 分類:[.NET 全般] になっていますが、これは本当でしょうか? [VB6 以前] や [Microsoft Office 全般] では無いのでしょうか?
VB6 や VBA であれば、On Error GoTo がしばしば利用されますが、 VB.NET においては本来、On Error GoTo は非推奨の構文です。
元質問のコードを見ると、 「MsgBox ("エラー")」 ← VBA 的な構文 ではなく、 「MsgBox("エラー")」 ← VB.NET 的な構文 と書かれていることから、VBA でははなく本当に VB.NET である可能性も捨てきれないですね。
とはいえ、「private function func1(**) as Boolean」という記述からすると、 これは単に掲示板に直書きしただけで、実際のコードと一致するものでは無いのでしょうけれども。
> この後デバッグ中にエラーが出ると > エラーの行がわからないので まず、VB.NET であるなら、On Error は使わず、Try - Catch による構造化例外処理を行うべきです。 これならば、例外時の Exception の StackTrace からエラー発生個所を調べることができます。
どうしても On Error を用いる場合、ソースに行番号を付与しておくと、 Erl 関数から「最後に通過した行番号」を得られます。(VBA でも VB.NET でも) 行番号が無い場合は 0 を返します。調査目的の機能なので、普段から使うようなものでは無いですが。
とはいえ On Error GoTo でジャンプしないということは、そもそものエラー発生個所が想定と違っていたか、 あるいは実行プログラムとソースコードのバージョン乖離という可能性もあるかと思います。
第三者が事象を再現可能な、最低限の短い実験用ソースコードを用意することはできますか? 頂いた情報だけでは、現在の状況が今一つ掴み切れずにいます。
> On Error GoTo 0 > をエラー発生している箇所の前につけたのですが > エラーが発生している行で止まりません。 これは、ステップ実行した場合も同様なのでしょうか?
もしも VBA であるのなら、[ツール]-[オプション]設定の [全般]タブにて、 エラートラップモードを変更してみてください。 ・エラー発生時に中断 ・クラス モジュールで中断 ・エラー処理対象外のエラーで中断
> private function func1(**) as Boolean > ' これを追加してもエラー行で止まらず > ' [エラー]のメッセージボックスが表示される > ' ↓ 『[エラー]のメッセージボックス』を表示しているのは、 func1 の方では無く、Sub の方なのですよね?
エラー発生個所で止める以前の問題として、
call func1(**) ERROR: MsgBox("エラー")
ではなく、
call func1(**) Exit Sub ERROR: MsgBox("エラー")
にしておくべきなのでは。
|
|