Access 2007 クエリの自動化 (1 つの条件の変更)

Access 2007 クエリの自動化 (1 つの条件の変更)

クエリが 6 つあり、各月末に 1 回ずつ実行したいと考えています (SQL については少し知っていますが、Access のデザイン ビューを使用して構築されているだけです)。そのため、5 月が終わったばかりなので、今後数日で 5 月のクエリを 6 つ実行する予定です。終わったばかりの月のデータのみが必要なので、クエリの条件は月の名前 (例: 5 月) に設定されています。毎月これらすべてを変更するのにそれほど時間はかかりませんが、これを自動化する方法はありますか? 現在、すべて 4 月に設定されていますが、数日後に実行するときにすべてを 5 月に変更したいと思います。また、毎月、月を 1 回入力するだけで (フォームのテキスト ボックスか、もっと良い方法をご存知であれば他の場所に)、6 つのクエリすべてを手動で開いて適切なフィールドまでスクロールし、条件を変更することなく、6 つのクエリすべてを変更できるようにしたいと考えています。

注意事項(VBAについて): 私はExcel VBAを使ったことがあるので、VBAの基本は知っていますが、Accessに特有のことはあまり知りません(コードを数回見たことはありますが)。そして、Access VBAについて何も知らない人もこれを使うでしょう。そこで、私は似たようなものを見つけたと思います。質疑応答これは VBA でも実行できますが、他の方法で実行したいと思います。クエリを後で少し再設計する必要がある場合、おそらく Access VBA をまったく知らない人によって再設計されるので、可能であれば VBA を使用しないソリューションがあると便利です。

答え1

クエリを実行するときに月を尋ねるようにする簡単な方法があります。クエリで、月の名前があるのと同じ場所に [Enter Month] を入力します。

ここに画像の説明を入力してください

クエリを実行すると、月を入力するためのダイアログ ボックスが表示されます。角括弧内には任意のテキストを入力できます。「月」と入力する必要はありません。これは単にダイアログ ボックスに表示される内容を定義するだけです。この手法は「パラメーター クエリ」と呼ばれます。

ここに画像の説明を入力してください

6 つのクエリすべてを 1 つのステップで実行するには、VBA コードが必要ですが、非常にシンプルなコードです。エンド ユーザーは VBA について何も知る必要はなく、フォームを開いてボタンをクリックするだけです。

フォームを作成し、ボタンを 1 つ配置します。そのボタンのプロパティ リストで、[イベント] タブを選択し、[クリック時] イベントを選択します。[クリック時] イベントの [...] ボタンをクリックします。

ここに画像の説明を入力してください

これにより、カーソルが正しい位置にある状態で VBA コード ウィンドウが開きます - Private Sub Command0_Click - ここで、Command0 はボタンの名前です。次のようにコードを入力します...

ここに画像の説明を入力してください

クエリに正しい名前を代入し、コード行を必要な回数だけ繰り返します。フォームを開いてボタンをクリックすると、すべてのクエリが一度に実行されるようになります。

次のステップ

最終的な改善点は、パラメータを一度入力して、それをすべてのクエリに自動的に適用することです。これにはいくつかの手順が必要です。

VBA コード ウィンドウで、コード「モジュール」を作成します。ウィンドウのプロジェクト ペインで右クリックし、[挿入]/[モジュール] を選択します。

ここに画像の説明を入力してください

新しいモジュールに次のコードを追加します。

ここに画像の説明を入力してください

gstrMonth は、月の名前を保持するグローバル変数文字列です。クエリでは、関数 GetMonth を使用してその値を取得します。

ここで、Form1 コードを次のように変更します。

ここに画像の説明を入力してください

サブルーチン「AskForMonth」は、ユーザーが月名を入力するためのダイアログ ボックスを表示します。その入力は gstrMonth 変数に割り当てられます。

ここに画像の説明を入力してください

Command0 (ボタン) コードでは、クエリが実行される前に AskForMonth を追加します。ここでも、正しいクエリ名を使用して、各クエリに対して「DoCmd」行を繰り返します。

最後の手順は、クエリ内のパラメータを関数「GetMonth」の呼び出しに置き換えることです。クエリ条件の [月を入力] の代わりに、「GetMonth()」を入力します。

ここに画像の説明を入力してください

この記事が、VBA の機能の一部を使用して Access タスクを自動化するきっかけになれば幸いです。

関連情報