アクセス担当のまみです。
プログラム作成で重要なのはやっぱり動作確認!
動作確認で必要になってくるのがデバッグなのですが、デバッグのやり方ってよくわからないですね・・・特にプログラムはじめたばかりだと・・・
今回は、デバッグのやり方をお伝えしますね。
Contents
ファイルを準備しよう
今回、説明のために「宛名印刷」ファイルを使用します。
プログラム作成の基本となる「フォームの作成」、「データの登録」、「データの検索」、「データの修正」、「レコードの削除」を「宛名印刷」ファイルを作成しながら、お伝えしています。
シリーズを読破すると、ついでにはがきの宛名印刷ができるようになっちゃいます。
お時間がありましたら是非、下記の記事から作成してみてください。
それでは、「宛名印刷」ファイルを開いて、コードを表示してみてください。
Dcountって何してくれるの?
DCount(“氏名”, “Q_重複チェック”)で、「Q_重複チェック」クエリの「氏名」フィールドの数を取り出してくれます。
「F_データ入力」の氏名に以前入力したことのある氏名を入力してみましょう。
表示されるメッセージは「はい」を選択して、「Q_重複チェック」クエリを開いてみましょう。
私の場合は、「田中 聡」さんのデータが2件登録されています。
つまり、DCount(“氏名”, “Q_重複チェック”)の値は2ということなのですが、このことを確認してみましょう。
デバッグをやってみよう
コードの画面を表示してみましょう。
DCount(“氏名”, “Q_重複チェック”)の数を知りたいので、①「If DCount(“氏名”, “Q_重複チェック”) > 0 Then」の左側を左クリックします。すると、●(ブレークポイント)がついて、反転表示されました。
プログラムを実行すると、ここで止まってくれるんです。
ここで止まってねって設定することを、(●)ブレークポイントを設定するって言います。
あとは、②「表示」タブからイミディエイトウィンドウを選択しておきましょう。
それでは、「F_データ入力」に戻って、プログラムを実行してみましょう!
「氏名」を入力して、エンターを押す!
そうなんです。ブレークポイントの手前でプログラムが止まって、今どんな状態(エラー等)なのかが調べられるんです。
ちなみに、今回はブレークポイントは一か所のみの設定にしましたが、複数設定できるので、少しずつプログラムを動かすことも可能です。
ここで、イミディエイトウインドウに「?DCount(“氏名”, “Q_重複チェック”)」と入力してみましょう。
入力したらエンターキーを押してみてください!
「Q_重複チェック」のデータ件数と同じ数字が表示されていますでしょうか?
もし、何も表示されていなかったり、違う数字が表示されていたりすると、クエリの作成をどこかで間違っているか、コードのどこかが違うってことなので、修正してみてください。
確認が終わったら、①ブレークポイント(●)を左クリックして解除しておきましょう。
それから、②の■(リセット)を左クリックして、デバッグは終了させてきましょう。
条件分岐
「DCount(“氏名”, “Q_重複チェック”)」で件数を調べてくれるので、「DCount(“氏名”, “Q_重複チェック”)」の件数があるとき、つまり、既に登録があるときには、メッセージボックスを表示してくれます。
そして、そのメッセージボックスで「Yes」を選択すると、下記のコードまでの実行でその後のコードは実施しない。
Dim nRet As Long If DCount("氏名", "Q_重複チェック") > 0 Then nRet = MsgBox("既に入力があります。登録しますか?", vbYesNo) If nRet = vbYes Then Exit Sub
Exit Subって、「tx氏名_LostFocus」の処理を抜けてくださいねって意味です。
「いいえ」を選択すると、その後の処理も実行されます。
「氏名」と「しめい」が空欄になるってことですね。
ちなみに、「Me!tx氏名.SetFocus」は「LostFocus」の処理では使えないようです。
色々試してみたのですが、「tx氏名」には止まってくれません・・・
「LostFocus」の処理では「tx氏名」には止まってくれないのだけど、別の処理にコードを書けば、「tx氏名」に止まってくれるってわかったので、別に記事を書きました!
まとめ
デバッグの方法はいかがでしたでしょうか?
デバッグの方法も色々あるんです。
私も使ったことのない方法もあるかなぁ。
ちょっと挑戦してみようかな?