webdevqa.jp.net

Access 2007クエリの自動化(1つの基準の変更)

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

注(VBAについて):私はExcel VBAを使用したので、VBAの基本は知っていますが、Accessに固有のことは何も知りません(以外)コードを数回見る)。そして、AccessVBAについて何も知らない他の人がこれを使用します。だから、私はVBAでこれを行うことができる同様の 質問/回答 を見つけたと思いますが、私はむしろ他の方法でそれをしたいと思います。後でクエリを少し再設計する必要がある場合、おそらくAccess VBAをまったく知らない人が、可能であればVBAを含まないソリューションがあると便利です。

1
Graphth

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

enter image description here

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

enter image description here

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

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

enter image description here

これにより、カーソルが正しい場所(Private Sub Command0_Click)にあるVBAコードウィンドウが開きます。ここで、Command0はボタンの名前です。図のようにコードを入力してください...

enter image description here

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

次のステップ

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

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

enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

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

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

enter image description here

これにより、VBAの機能の一部を使用してアクセスタスクを自動化することができます。

2
Dave Becker