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システムが作れるようになります。

ぜひ試してみてください!

広告