Access VBAでクエリを実行する方法をお探しですね。
広告
Accessのクエリをボタン一つで実行する方法【VBA入門】
Accessでデータベースを作っていると、「クエリをもっと簡単に実行したい」という声が必ず出てきます。
毎回クエリをダブルクリックして手動で実行するのは面倒ですし、Accessに慣れていない人にとってはハードルが高いですよね。
そこで役立つのがVBAです。
フォームにボタンを配置して、クリック一つでクエリを自動実行できるようにすれば、誰でも安心してシステムを使えるようになります。
この記事では、VBAでクエリを実行する基本から、実務で使える応用テクニックまで、わかりやすく解説していきます。
まずは基本から:VBAでクエリを実行する準備をしよう
VBAでクエリを実行するときに使うのが「DoCmd.OpenQuery」というコマンドです。
このコマンドに、実行したいクエリの名前を指定するだけで、そのクエリを開いたり実行したりできます。
フォームにコマンドボタンを置いて、そのボタンの「クリック時」イベントにこのコードを書けば、ボタンを押すだけでクエリが動く仕組みが完成します。
マクロでも似たようなことはできますが、VBAを使うメリットは「自由度の高さ」です。
条件によって処理を変えたり、エラーが起きたときの対応を細かく設定したり、複数のクエリを順番に実行したりと、より実践的なシステムが作れるようになります。
実際にコードを書く前に、まずはボタンの準備をしましょう。
フォームを「デザインビュー」で開いて、コマンドボタンを配置します。
このとき、ウィザードが起動したら「キャンセル」してOKです(自分でコードを書きたいので)。
次に、ボタンのプロパティシートを開いて、「イベント」タブの「クリック時」で「イベントプロシージャ」を選び、右側の「…」ボタンをクリックします。
すると、VBE(Visual Basic Editor)という画面が開きます。
ここがコードを書く場所です。
選択クエリを実行してデータを表示する方法
まずは、データを抽出して表示する「選択クエリ」をボタンで実行する方法から見ていきましょう。
選択クエリは、データベースの中身を書き換えるわけではなく、条件に合うデータを画面に表示するだけなので、比較的安全に使えます。
VBEの画面には、すでに「Private Sub コマンドボタン名_Click()」と「End Sub」という枠が用意されているはずです。
この間に、次のようなコードを書きます。
“`vb
DoCmd.OpenQuery "クエリ名", acViewNormal, acReadOnly
“`
ここで「acViewNormal」は「データシートビューで開く」という意味で、「acReadOnly」は「読み取り専用で開く」という意味です。
読み取り専用にしておけば、表示されたデータを誤って編集してしまう心配がありません。
この方法を使えば、ユーザーは左側のナビゲーションウィンドウからクエリを探す手間が省けます。
さらに、テキストボックスに検索条件を入力してボタンを押すと、その条件に合ったデータが表示される、といった検索フォームも作れるようになります。
更新クエリや追加クエリを実行するときの注意点
次は、データを書き換える「更新クエリ」や、新しいデータを追加する「追加クエリ」、不要なデータを削除する「削除クエリ」といった、アクションクエリの実行方法です。
基本的には選択クエリと同じように「DoCmd.OpenQuery “クエリ名”」と書けば実行できますが、一つ大きな問題があります。
それは、**確認メッセージが毎回表示されてしまう**ことです。
「〇件のレコードを更新します。
よろしいですか?」といったメッセージが出て、毎回「はい」をクリックしなければなりません。
これでは作業効率が悪いですよね。
そこで使うのが「DoCmd.SetWarnings False」というコマンドです。
これをクエリ実行の前に書くと、確認メッセージが表示されなくなります。
“`vb
DoCmd.SetWarnings False
DoCmd.OpenQuery "更新クエリ名"
DoCmd.SetWarnings True
“`
**ここで超重要なポイント**があります。
それは、クエリ実行後に必ず「DoCmd.SetWarnings True」を書いて、警告メッセージの設定を元に戻すことです。
これを忘れると、Accessを閉じるまで警告機能がオフのままになってしまい、他の重要な操作でも確認メッセージが出なくなります。
うっかりテーブルを削除してしまう、といった大事故につながる危険性があるので、必ずセットで書くようにしましょう。
複数のクエリを連続実行する実践テクニック
実際の業務では、「追加クエリでデータを取り込んで、その後すぐに更新クエリで処理済みフラグを立てる」といった、複数のクエリを順番に実行したい場面がよくあります。
VBAなら、これも簡単に実現できます。
基本的な書き方は、最初に警告メッセージをオフにして、必要なクエリを順番に並べて、最後に警告メッセージをオンに戻す、という「サンドイッチ構造」です。
“`vb
DoCmd.SetWarnings False
DoCmd.OpenQuery "追加クエリ名"
DoCmd.OpenQuery "更新クエリ名"
DoCmd.SetWarnings True
“`
これで、ユーザーはボタンを一回押すだけで、複雑な処理を一瞬で完了させることができます。
さらに実務レベルのコードにするなら、**エラー対策**も入れておきましょう。
途中でエラーが起きたときに、警告メッセージがオフのまま放置されるのを防ぐためです。
“`vb
Private Sub コマンド1_Click()
On Error GoTo エラー処理
DoCmd.SetWarnings False
DoCmd.OpenQuery "追加クエリ名"
DoCmd.OpenQuery "更新クエリ名"
DoCmd.SetWarnings True
MsgBox "処理が完了しました", vbInformation
Exit Sub
エラー処理:
DoCmd.SetWarnings True
MsgBox "エラーが発生しました:" & Err.Description, vbCritical
End Sub
“`
「On Error GoTo エラー処理」を最初に書いておくと、もしエラーが起きても「エラー処理:」のところにジャンプして、きちんと警告メッセージをオンに戻してくれます。
さらに、何がエラーだったのかをメッセージで表示するので、ユーザーにも状況がわかりやすくなります。
このように、ちょっとした工夫を加えるだけで、プロが作ったような安全で使いやすいAccessシステムが作れるようになります。
ぜひ試してみてください!
広告
