Share via


フォームまたはレポートを開く際にフィルターを適用する

Visual Basic for Applications (VBA) コードを使用してフォームまたはレポートを開く場合は、表示するレコードを指定できます。 フォームまたはレポートに表示するレコードを指定する方法は複数あります。 一般的な方法は、ユーザー設定のダイアログ ボックスを表示し、そこでユーザーがフォームまたはレポートの基になるクエリを入力するというものです。 抽出条件を取得するために、ダイアログ ボックス内のコントロールを参照します。 以下のセクションでは、ユーザー設定のダイアログ ボックスで入力された抽出条件を使用してレコードをフィルターする 3 つの方法について説明します。

wherecondition 引数の使用

OpenForm または OpenReport メソッドまたはアクションの wherecondition 引数は、ユーザーが値を 1 つだけ指定している状況で条件を取得する最も簡単な方法です。 たとえば、印刷する請求書について、受注コードの選択をユーザーに求めるフォームを表示できます。 イベント プロシージャを使用している場合、次のコード行に示すように OpenReport メソッドに引数を追加することによって、1 つのレコードだけを表示するフィルターを適用できます。

DoCmd.OpenReport "Invoice", acViewPreview, , "OrderID = " & OrderID 

フィルター式の は "OrderID = " 、請求書レポートの基になるクエリの OrderID フィールドを参照します。 式の右側にある OrderID は、ダイアログ ボックスの OrderID リストからユーザーが選択した値を参照します。 式によって両者が連結されるため、レポートでは、ユーザーが選択したレコードの請求書だけが出力されます。

wherecondition 引数は、OpenForm または OpenReport メソッドを実行するボタンの OnClick イベントに対して指定されたイベント プロシージャによってのみ適用されます。 このことにより、任意の数のダイアログ ボックスで同じフォームまたはレポートを開くことができ、また、ユーザーが望む操作に応じて異なる抽出条件のセットを適用できる柔軟性が実現されます。 たとえば、ユーザーは特定の顧客に対する請求書を印刷したり、特定商品の受注だけを表示したりできます。

wherecondition 引数を使用して複数のフィールドの条件を設定しますが、その場合、引数の設定はすぐに長くなり、複雑になります。 そのような状況では、クエリで抽出条件を指定する方が簡単な場合があります。

フィルターとしてのクエリの使用

フィルター クエリとも呼ばれる独立したクエリで、ダイアログ ボックス上のコントロールを参照してその抽出条件を取得することができます。 この方法を使用する場合、作成するフィルター クエリの名前を OpenForm または OpenReport メソッド (またはアクション) の filtername 引数に設定することによって、フォームまたはレポート内のレコードをフィルターします。 フィルター クエリには、開こうとしているフォームまたはレポートのレコード ソース内のすべてのテーブルを含める必要があります。 フィルター クエリではさらに、開こうとしているフォームまたはレポート内のすべてのフィールドを含めるか、その "OutputAllFields/全フィールド表示" プロパティを Yes に設定する必要があります。

フィルターとして使用するクエリを作成して保存した後で、そのフィルター クエリの名前を、OpenReport メソッド (またはアクション) の filtername 引数に設定します。 filtername 引数に指定したフィルター クエリは、OpenReport メソッドを実行するたびに適用されます。

クエリをフィルターとして使用して抽出条件を設定する方法には、OpenForm または OpenReport メソッドの wherecondition 引数を使用する方法と同様の利点があります。 フィルター クエリにより、複数のダイアログ ボックスで同じフォームまたはレポートを開くことができ、またユーザーが望む操作に応じて異なる抽出条件セットを適用できるという、同じ柔軟性が実現されます。

フォームまたはレポートの基になるクエリでダイアログ ボックス コントロールを直接参照する

OpenForm または OpenReport メソッドの引数を経由する代わりに、フォームまたはレポートの基になるクエリでダイアログ ボックスのコントロールを直接参照することもできます。 この方法を使用する場合、OpenForm または OpenReport メソッド (またはアクション) の wherecondition または filtername 引数は不要です。 その代わりに、フォームまたはレポートを開くたびに、その基になるクエリによってダイアログ ボックスが検索され、その抽出条件が取得されます。 ただし、ユーザー設定のダイアログ ボックスからではなく [データベース] ウィンドウからフォームまたはレポートが開かれた場合は、ダイアログ ボックスの値の入力をユーザーに求めるパラメーター ボックスが表示されます。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。