VBA(VB for Application)でのデバッグ方法がわからなくて苦労されている方はいらっしゃいますか?
下記の方法をご存じない方はやってみてください。デバッグの効率が上がります。
8月7日追記:修正しました。
VBエディタで実行を一時停止させる
VBエディタのコードが表示されている画面にて、コードの左脇、下の図で茶色い「●」が付いている箇所をクリックしますと、「●」が付いたり外れたりします。「●」が付いている状態ですと、その行で実行が一時停止します。
Accessを実行し、この「●」の行に差し掛かると、実行が止まります。ここで「Me!cmb_社員コード」の変数の値を知りたいとします。その変数名のところにマウスカーソルを持っていくと、
変数に「10002」が入っていることがわかります。例えばここに値が入っているはずが「Null」などとなっていると、その前のVBAコードに誤りがあることになります。
ステップ実行
一時停止した場所からVBAコードを1行ずつ実行させるにはここで「F8」キーを押します。
ステップ実行をやめて一気に実行させるには「F5」キーを押します。「●」印は消さないと、また次にここのコードの実行になったときに停止します。不具合が解消されたら「●」印をなくして一時停止を解除します。
イミディエイトウィンドウを利用する
メニューバーにて【表示】-【イミディエイトウィンドウ】をクリックするか、ショートカットキー([Ctrl] + G)にてイミディエイトウィンドウ(昔はデバッグウィンドウと言っていた気がします)が表示されます。
VBエディタに記載のコードにて
Debug.Print <変数名>
を入れておくことで、動作を止めることなく、Debug文が実行された時点での<変数名>の値が何だったのかを知ることができます。ただ、アチラコチラにたくさん入れますと、どの変数の値なのかわからなくなってきますので、
Debug.Print "テキストボックス1の値 =" & テキストボックス1.value
などとしておくと良いでしょう。
また、イミディエイトウィンドウ内にて関数を呼び出して実行することも可能です。
Print <関数名(引数1, 引数2…)>
下記はハッシュ値を求めるSha256関数を呼び出した場合です。引数に文字列を指定することで、それに対応したハッシュ値が次行に表示されます。
VBE(VB Editor)にて[Ctrl] + Nにて空白行の挿入、[Ctrl] + Yにてカーソル行を行削除(クリップボードに保存されます)することも併せて覚えておくと便利です。