|
No103703 で解決済みになっていたフラグが No103704 で解除されているようなので、 解決済みに戻しておきます。
■No103702 (マクベス さん) に返信 >> エラー発生個所で止める以前の問題として > エクセルには try〜catch〜finaly がないので
VBA でのエラー復帰は Resume ステートメントを使う設計なので、 エラー有無によらず実行させるような Finally 句に該当する構文は無いですね。
Try〜Catch〜Finally を VBA で無理矢理に真似ようとすると、こんな感じになってしまうかな…。
Sub Qux() Dim a As Variant Try: On Error GoTo Catch a = [Sheet1!A1].Value / [Sheet1!A2].Value MsgBox a, vbInformation 'Exit Sub GoTo Finally Catch: MsgBox "Error: " & CStr(Err.Number) & "(0x" & Right(String(8, "0") & Hex(Err.Number), 8) & ") on [" _ & Err.Source & "]" & vbCrLf & Err.Description, vbExclamation Finally: MsgBox "終了しました" End Sub
■No103704 (マクベス さん) に返信 > エラートラップモードを > ・エラー発生時に中断 > に変更すると > 止まってほしくない > On Error Resume Next > で止まってしまうんですね。
「エラー発生時に中断」を選択していた場合には、 On Error Resume Next でも On Error Resume 行番号 でも On Error Resume 行ラベル でも すべて、一時停止状態になります。 あえて停止させるための『エラー発生時に中断』モードですからね。
このモードは、プロシージャー内でエラーが握りつぶされているなどしていて、 呼び出し元で発生していた本来のエラーを捉えられなくなっているような場合において 調査目的・改修目的で使われたりします。
通常は「クラス モジュールで中断」もしくは「エラー対象外のエラーで中断」で良いと思いますが、 デバッグ中にもエラー トラップ モードは変更できますので、その時々で使い分けてください。
ただ、Err オブジェクトの状態は更新されているはずなので、一時停止中に インジケーターバーの 黄色矢印 を手動ドラッグして次の行に移動させることで、 On Error Resume Next 相当のステップ実行動作とみなすことはできるでしょう。
※インジケーターバーを非表示にしている場合は、[ツール]-[オプション]画面から [エディターの設定]タブの [インジケーター バー]の設定を on にしておきます。
|