[[20260519100514]] 『デバッグ方法について』(まさる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『デバッグ方法について』(まさる)

 実際には複雑なプログラムですが。
 以下のようなテストプログラムを作りました。

 Private Sub sub1()
     On Error GoTo ERROR
     Debug.Print "[" & sub2 & "]"
     Exit Sub
 ERROR:
     MsgBox ("ERROR:sub1")
 End Sub

 Private Function sub2()
     On Error GoTo ERROR
     sub2 = sub3
     Exit Sub
 ERROR:
     MsgBox ("ERROR:sub2")
 End Function

 Private Function sub3()
     On Error GoTo ERROR
     sub3 = 1 / 0
     Exit Sub
 ERROR:
     MsgBox ("ERROR:sub3")
 End Function

 実際のプログラムではふくざつなので、ステップ実行で
 進めているとデバッグに非常に時間がかかります。

 最初は sub3 のON Error GoTo ERROR を ON Error GoTo 0
 にすると止まってくれるのかと思ったのですが
 Sub2 の ERROR に飛んでしまいます。

 そこで、ON Error GoTo ERROR を ON Error GoTo 0 に
 手修正で変換していたのですが、面倒になってきたので先頭に以下を挿入し
 #Const DEBUG_MODE = 1
 ON Error Goto Error の部分を以下のようにしました。

 #If DEBUG_MODE = 1 Then
   On Error Goto ERROR
 #ELSE
   On Error Goto 0
 #ENDIF

 これで #Const DEBUG_MODE = 1 の 1 を 0 にすることで本番、1でデバッグ
 とすることができましが、このファイルを人に渡したときに
 #Const DEBUG_MODE = 0
 にするのを忘れてしまいました。
 長くなりましたが、VBEのからの実行時のみ DEBUG_MODE = 1 で処理され、
 シートやユーザーフォームなどから直接実行された時は DEBUG_MODE = 0 で
 処理されるようなことはできませんか?

 また、他にもっといいデバッグの方法があれば教えてください。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 VBEのメニューのツール→オプションで
 エラートラップのオプションを[エラー発生時に中断]を選択してください。
(´・ω・`) 2026/05/19(火) 10:35:27

初めて知りました。簡単にできたんですね。
やってたことが無駄なことだったんですね。
聞いてよかったです。
ありがとうございました。
(まさる) 2026/05/19(火) 11:10:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.