マクロでいこう! ~ Excel活用HomePage ~

VBAでラクしたい ~Part 2~

こちらのコーナーでは、VBAの使い方を中心にご紹介していきます。
作者自身の経験から書いておりますので、本とかとは違ったコトを
書いてるトコロもあるかもしれません。 そういう場合は、良さそうな方を信じましょう(^_^;
TOPVBAでラクしたい ~Part 2~ > 初歩のデバッグ手順

初歩のデバッグ手順

プログラム内に存在するエラー要素のことを、通常「バグ」なんて言います。
その「バグ」を取り去る作業のことを「デバッグ」と言います。

プログラムを修正していくと、思わぬところでバグが出たりするものです。前回の
バグなんかも修正前は動いていたわけですから、何のことやらという感じかもしれ
ません。

ですが順を追って見ていけば必ず原因は突き止められます。「なぜ起こるのか」
「どうすれば回避できるのか」その辺について確実に理解しながら読み進めていけ
ば、今後かなり自分の力になると思いますよ(^^)


さてそれでは本題

登録ボタンをクリックした際に「アプリケーション定義、またはオブジェクト定義
のエラーです」などというエラーメッセージが表示されたかと思います。
これについては "何か定義関係で間違いがあったんだな" と思っておけばおっけー
です(^-^;

そこで、表示されているエラーダイアログの下に「デバッグ」っていうボタンがあ
りますよね。そこをクリックしてみて下さい。
この「デバッグ」ボタンは"エラーの発生個所"を示してくれるものですので、今後
何度も使います。覚えておきませう。

そうしますと

    Cells(LngRecRow, cNameDataCol).Value = TxtName.Text

の位置に黄色いラインが引かれていますよね?
つまり"この1文の中にバグが潜んでいますよ"という意味なんです。

ここで試しに、LngRecRow の上にマウスポインタを近づけてみて下さい。

どうですか? LngRecRow=0 とか表示されましたよね。
このように、デバッグ作業等でプログラムの実行が一時中断している状態で、変数
名やオブジェクト名の上にマウスポインタを近づけると、現在セットされている値
を確認することができます(^-^)
他の cNameDataCol や TxtName.Text にも同じように試してみて下さいね。


・・・そうすると、ふと気づくことがあるはずです。いかがですか?

LngRecRow の値が 0 になっています。
「えっ?フォームが表示される前に初期値をセットしているはずじゃ?」とお思い
になりますよね。

確かに、初期値をセットする処理は UserForm_Initialize に移動しました。

「でも本当にこの処理が有効に働いているの?」ということは、なんとなく疑わし
いですよね(^^;)

なのでここから確認していく必要がありそぉだなと、ウスウス感づいてくるわけで
す。やってみましょう。

処理は一旦開始してしまうと一気に最後まで走ってしまいますから、途中の状況を
確認するにはどこかでSTOPをかけてやらなければいけないわけです。
この"STOPさせたい場所"のことを「ブレークポイント」といいます。ブレーク
ポイントを設定しておけば、一旦その場所で実行が止まりますので、そこから1行
ずつ実行して確認したりもできます。

試しに

Private Sub UserForm_Initialize()
     
    '*** 行位置の初期化 ***
    LngRecRow = cInitRow
    
End Sub

の LngRecRow = cInitRow にブレークポイントを設定してみましょう。

LngRecRow = cInitRow の行の左にあるグレー部分をクリックしてみて下さい。
そうすると丸印が表示されると共に、その行が色付きになりましたよね。これが
ブレークポイントの印になります。もう1回クリックすると解除されます。

この状態で処理を実行してみましょう。

ワークシートに配置したボタン(図形)をクリックして、フォームを表示させよう
としてみてください。

するとフォームが表示されずに、いきなりVisual Basic Editor の画面に切り替わ
ってしまったと思います。そしてよく見ると、先程ブレークポイントを設定した個所
が反転表示されているはずです。確かにここで実行が止まっているのがわかりますね。

で、今のこの状態っていうのは「まだこの行は実行されていない状態」です。
ですのでこの処理で言えば、変数LngRecRow に 定数cIntiRow の値をセットしていな
い状態でSTOPしていることになります。

ここを通過して初めて処理が実行されたことになりますので、それではやってみましょ
う。ヽ(^-^ )

キーボード上の "F8" キーを1回押してみて下さい。反転表示が次の End Sub に移り
ましたよね?

このF8キーを押す毎に、1行ずつ処理が実行されるわけです。

こんなふうに処理を止めながら、段階を追って実行していく形式を「ステップ実行」な
どと呼んでいます。一応覚えておきませう。

そして再び LngRecRow = cInitRow の行にマウスポインタを近づけて、内容を確認して
みて下さい。

そうすると、またもや「なんでぢゃぁぁぁっ!」って状況が見えるハズ。


続きはまた明日(( ((( ヽ(;^^)ノ


TOPVBAでラクしたい ~Part 2~
Copyright (C) 2006 マクロでいこう!. All Rights Reserved.