6

VBA コードが呼び出されるたびにブレーク モードに入るオプションのオン/オフを切り替えられるようにしたいと考えています。これを行う唯一の方法は、コードのすべての「エントリ ポイント」にブレークポイントを設定するか、これらのメソッドのすべてで、デバッグのために個別の関数を呼び出すことです。

「エントリのポイント」は、ボタンのクリックまたはワークシートのイベントである可能性があり、かなりの数があります。

たとえば、次のことができます。

Private Sub bt1Click()
    callThisOnEveryMethod
    'other code
End Sub
Private Sub bt2Click()
    callThisOnEveryMethod
    'other code
End Sub
'etc, repeat 100 times
Private Sub callThisOnEveryMethod()
    'set breakpoint on this method
End Sub

これは、各メソッドと後続のすべてのメソッドに追加することに依存しているため、実際には理想的ではありません。この方法でそれらの 100% を取得できるとは本当に信じていません。また、デバッグ目的のためだけに多くの混乱が生じています。ここに他のコードを追加したり、型ステートメントでラップしたりすることもできますが、 VBA の実行を開始できる、作成するすべてif MY_GLOBAL_DEBUG_BOOLEAN thenのメソッドにこのコード (または呼び出しメソッド) を追加する必要があります。

VBA コードの実行を開始できるメソッドが 100 個あるとします。

オン/オフを切り替える数が多いため、これを行うたびにすべてのメソッドでブレークポイントを設定および削除することも理想的ではありません。

私が望むのは、「コードの実行を開始するときはいつでも、ブレークポイントやアサーションに関係なく、各メソッドに多くの余分なコードを必要とせずに、すぐにブレークしてデバッグ モードに入る」ことを VBA に伝えることです。

これは可能ですか?

4

2 に答える 2

3

残念ながら、答えはノーです。各エントリ ポイント プロシージャにコードまたはブレークポイントを挿入せずにこれを行う方法はありません。

これを行う方法がないのはなぜですか?本当の問題は、なぜこれを行う方法が必要なのかということです。ポイントは何ですか?永続的なデバッグ モードは意味がありません。デバッグ モードの考え方は、特定の手順またはエラーをデバッグする必要がある場合にのみ、モードに入ることです。あなたが正確に何を達成しようとしているのかわかりませんか?

とにかく、あなたが提案する方法は、callThisOnEveryMethodおそらくあなたが得ることができる最も近いものです。または、実際には、新しいプロシージャを定義する必要はありません。使用するだけです。

Debug.Assert MY_GLOBAL_DEBUG_BOOLEAN

は、MY_GLOBAL_DEBUG_BOOLEANデバッグ モードに入るために False に設定する必要があるパブリック モジュール レベルの定数です。

于 2013-11-05T21:13:39.060 に答える