Accessで既に出来上がっているツールがどんな動作をしているのか具体的に確認したいと考えた時に、VBEのステップインで確認しようと考える人は少なくないのではないでしょうか。
もしくは、次のような状況もあるかもしれません。Accessを利用したツールを作る際に既に日頃から使っているツールがあったとします。新しくツールを作る時にそのツールを流用すれば非常に短時間でできるのだが、そのためには既存のツールの機能を順番に確認する必要があります。
けれどもそんな時になぜだかステップインができない。そういった状況に出くわしてしまった人はいないでしょうか。以上のようにAccessのVBEを利用する時にいざステップインを実行しようとしてもできないといった時、その人はどう考えるでしょうか。
AccessのVBEでデバッグできない原因として、自分の場合は最初
- AccessにはAccessのデバッグの仕方がある?
- 拡張子がmdbとaccdbで何か動作が違ったりするのか?
- コード上にブレークポイントを置いて実行してみる
- コード上にStopステートメントを入れて実行してみる
なんてことを考えたり試してみたりしました。けれどもどれも違うようです。
基本的にAccessにはExcelのVBEと同様のデバッグ機能がありますし、拡張子を変更することでできなかったデバッグができるようになるということもないようです。
コード上にブレークポイントを設置したり、Stopステートメントを入れてみても動作は止まりません。素通りして最後まで処理が実行されてしまいます。このような場合、どうすればAccessのVBE上のデバッグでステップインができるようになるのでしょうか。
今回は備忘録も兼ねて、この解決策を整理していきます。
デバッグとステップインとは
一応ここで簡単にデバッグとステップインという言葉の意味について簡単に確認しておきます。
通常プログラミングは、一回で最初からミスなくコーディングしたり、さらにコーディングした結果も意図したものだったというのはなかなかありません。
というのは、特にある程度の分量のプログラミングをする場合は、入力ミスとかエラーが発生したりします。仮にミスなくコーディングできても結果が意図したものではなかったということもよくあります。
そういった時のプログラムの誤りを探して修正する行為のことを「デバッグ」と呼びます。プログラムの誤りを修正するデバッグには様々な方法がありますが、その中のひとつに「ステップイン」という言葉あります。このステップインとは、「コードを指定した行数だけ実行できる機能」です。
VBEには「ブレークポイント」というものがあり、処理を中断するコード内の行のことを指します。コード画面において、ブレークポイントを設定して処理を中断した状態でステップインを使うと、コードを1行ずつ順番に実行することができます。
このように1行ずつ順番にコードの内容を確認していくことによって、どのコードに誤りがあるのかを発見できるようになります。
デバッグという領域はもっと全然広いのですが、今回の記事の便宜上とりあえずこの部分だけを確認しておきました。
AccessVBAのデバッグでステップインできない時の解決方法
まず結論を述べると、Accessのオプションにある「ショートカットキーを有効にする」にチェックを入れると、VBEの画面で一行ずつステップインできるようになります。具体的には次のような手順になります。
まず最初のAccessの画面のファイルタブを選択します。
次に表示された画面の左側の項目から「オプション」を選択します。
表示された「Accessのオプション」画面の左側の項目から「現在のデータベース」を選択し、「ショートカットキーを有効にする」のチェックボックにチェックをいれます。
以上の手順を踏むことで、AccessのVBEでそれまでできなかったデバッグのステップインができるようになります。
ちなみに「ショートカットキーを有効にする」の右側にある「i」のマーク?にポインタを移動させると、「ナビゲーションウィンドウの表示、直前のウィンドウの表示、VBウィンドウの表示、実行の中断」といったポップアップが表示されます。
このポップアップの最後の方にある「実行の中断」という文字列があることからもわかるように、ここがデバッグの動作に一部関わっているのでしょう。
逆に考えると、今までステップインができなかったのはこの箇所にチェックが入っていなかったからです。
なぜこの箇所にチェックが入っていないツールがあるのか、それはそのツールの作成者がユーザーに設定を弄られるなどしてツールが機能しなくなるのを防ぐという目的があったのだと思います。
Accessは「開発用のツール」という点から考える
既存のAccessのツールの機能をステップインをしようとしたが、最初はそれができなかった、というお話はしました。
Accessには他にもナビゲーションメニューを非表示にしたり、リボンの機能を一部しか使えないようにするなど、Excelと比較して機能を制限するような仕組みが多い気がします。こういった面倒くさい機能がついているのはなぜなのでしょうか。
『Accessマクロ&VBAのプログラミングのツボとコツがゼッタイにわかる本 』にはAccessについて次のように書かれています。
P.12
このようにAccessで作成したデータ管理・活用の仕組みは、もう立派に「アプリケーション」と呼べるものです。
たとえば顧客の名前や住所などのデータを整理して保存し、必要に応じて検索できたり、宛名ラベルを印刷できたりする仕組みなら、それは顧客管理のアプリケーションと呼べるでしょう。
Accessはデータベースソフトウェアですが、データベースを軸として、さまざまなアプリケーションを作成できる開発ツールとしての側面もあるのです。
なるほど、確かに開発用のツールであれば、作成したアプリケーションの内部をユーザーに弄られては困りますからね。ユーザーは開発者が意図した操作とは違う操作をしたりするものです。
手が滑って全然違うボタンを押してしまったり、ちょっとした興味から設定がいじられてしまったりなど、エラーが出てしまう可能性は無限にあります。意図しない結果やエラーが出ないように、そもそも特定の箇所を「最初から操作できない」ようにしておけば問題が起こる可能性は非常に小さくできます。
ユーザーに制限を加える機能が多い理由として他に考えられることは、「データの整合性を保つ」必要があるからでしょう。『これ一冊で完璧! AccessVBA即戦力講座』には次のように書かれています。
P.18
データベースと呼ばれるもので一番大切なのは、「データが正しく保存されている」ことだからです。
間違ったデータが保存されていたり、必要なデータが保存されていなかったりしたら、その時点でデータベースとしては「使えない」ものになってしまいます。
だから、Accessデータベースにとって入力チェック機能は、無くてはならない要素なのです。
ちょっとした操作の失敗で誤入力があってはデータの整合性を保つことはできません。そういった時にユーザーに設定を変更されてしまっては、本来であれば機能していたチェック機能が動作しなくなってしまうかもしれません。
以上のようなことから、Accessにはユーザーが使える機能を制限する仕組みが多いのだと思います。
なぜ今回の内容を書こうと思ったか
理由は大きくふたつあります。
一つ目は自分にとって「すぐには検索できなかった」というのがあります。インターネットでAccessでステップインできない現象の解決方法について結構調べてはみたのですが、直接的に「こういった場合の解決策はこうです」というページは見つけられませんでした。
自分はAccessVBAを使ったツール開発の経験はまだ全然浅いです。ですから最初の頃は、デバッグできないというのは既存のツールの作成者が自分にはわからないような、何かすごく高度な技術を使って使えないようにしているのだろうと思っていました。
そういったこともあって、とりあえず少しは調べてみたのですが解決策は見つかりそうになかったのですぐに諦めてしまいました。
とはいっても、時間が経つごとにそうは言っていられない状況になっていきます。だから「何とかしてどうにかできないか」ということで再度根気よく調べていきました。
すると、直接的ではないですが「もしかしたらこれじゃないか」ということで今回のAccessのオプションの設定変更の箇所までたどり着いたわけです。
今回の解決方法が見つけられたのは本当に偶然です。
二つ目の理由は、自分と同じような経験をしている人も世の中にはいるのではないかということです。
Accessに限らずExcelでもVBAを使ってツールを作る際は機能の確認やテストも含めてデバッグやステップインは必須です。けれども開発者にとってそれが「できない」とあっては困ってしまいます。
なぜならデバッグができないと、なぜ意図したとおりに動作しないのか、具体的にどの箇所に問題があるのか、といったことなどがわからないからです。
ですから、もしかしたら自分みたいに悩みを持っていても解決方法が見つけられずツール開発を最初から諦めてしまった人も多いのではないかと思いました。
こういった悩みがあった時にインターネットでズバリ直接的にすぐに解決方法が見つけられれば便利だと思って今回のような形で書かせていただきました。この記事を見てくれた人に対して少しでもお役に立てれば幸いです。
コメント