Form.Filter イベント (Access)

ユーザーが [フォームによるフィルター]、[詳細なフィルター/並べ替え]、または [フォームによるサーバー フィルター] を選択してフィルター ウィンドウを開いたときに発生します。

構文

フィルター (CancelFilterType)

expressionForm オブジェクトを表す変数です。

パラメーター

名前 必須 / オプション データ型 説明
Cancel 必須 整数型 (Integer) フィルター ウィンドウを開くかどうかを設定します。 引数 CancelTrue (1) に設定すると、フィルター ウィンドウが開かなくなります。 DoCmd オブジェクトの CancelEvent メソッドを使用しても、フィルター ウィンドウを開かないようにできます。
FilterType 必須 整数型 (Integer) ユーザーが開こうとしているフィルター ウィンドウ。 FilterType 引数には、次のいずれかの組み込み定数を指定できます。
  • acFilterByForm
  • acFilterAdvanced
  • acServerFilterByForm

注釈

このイベントが発生したときに、マクロまたはイベント プロシージャを実行するには、" OnFilter/フィルター設定時" プロパティをマクロ名または "[Event Procedure]"/"[イベント プロシージャ]" に設定します。

Filter イベントを使用して、次の処理を行います。

  • フォームに対するフィルターを解除します。 これには、Filter のマクロまたはイベント プロシージャで、フォームの "Filter/フィルター" プロパティまたは "ServerFilter/サーバー フィルター" プロパティを長さ 0 の文字列 (" ") に設定します。 これは、余分な条件が新しいフィルターに表示されないようにする場合に特に便利です。 たとえば、 フィルター 選択機能を使用すると、使用する条件 (フォームで選択したテキスト) が Filter または ServerFilter プロパティ WHERE 句式に追加され、[ フォームによるフィルター ] ウィンドウと [高度なフィルター/並べ替え ] ウィンドウまたは [サーバー フィルター ] ウィンドウの両方に表示されます。 これらの前の抽出条件を、 Filter イベントを使用して削除できます。

  • 新しいフィルターに既定値を入力します。 それには、"Filter/フィルター" プロパティまたは "ServerFilter/サーバー フィルター" プロパティに、抽出条件としてこの値を設定します。 たとえば、 製品 フォームのすべてのフィルターに現在の製品 (製品フォームの [中止済み ] コントロールが選択されていない 製品 ) のみを表示することができます。

  • Access のフィルター ウィンドウの代わりに独自のフィルター ウィンドウを使います。 Filter イベントが発生したら、カスタム フォームを開き、このフォームのエントリを使用して "Filter/フィルター" プロパティまたは "ServerFilter/サーバー フィルター" プロパティを設定し、元のフォームにフィルターを適用できます。 ユーザーがこのカスタム フォームを閉じると、元のフォームの FilterOn または ServerFilterByForm プロパティを True (1) に設定してフィルターを適用します。 Filter イベントをキャンセルすると、Access フィルター ウィンドウが開かなくなります。

  • 特定のコントロールが、[フォーム フィルター] ウィンドウまたは [フォームサーバーフィルタ] ウィンドウに表示されないようにしたり、これらのウィンドウで使用できないようにしたりできます。 Filter イベント プロシージャまたはマクロでコントロールを非表示または無効にした場合、コントロールは [フォームでフィルター] ウィンドウまたは [サーバー フィルター] ウィンドウで非表示または無効になり、フィルター条件を設定するために使用できません。 ApplyFilter イベントを使用すると、フィルターの適用後、またはフィルターがフォームから削除されたときに、このコントロールを表示または使用可能にできます。

次の例は、ユーザーがこのフィールドでフィルター処理できないように、ユーザーがフィルターを作成しようとしたときに Orders フォームの TotalDue コントロールを無効にする方法を示しています。 TotalDue 値を持ち、他のフィルター条件を満たすレコードは、常にフィルター処理されたフォームに表示されます。 また、ユーザーは、[フィルター/並べ替えの編集] ウィンドウではなく [フォーム フィルター] ウィンドウを使用しなければならなくなります。

この例を試すには、TotalDue コントロールを含む Orders フォームに次のイベント プロシージャを追加します。 TotalDue コントロールを使用する [詳細なフィルター/並べ替え] ウィンドウを使用して、フィルターを作成してみてください。 また、[フォーム フィルター] ウィンドウを使用して、同じフィルターを作成します。

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer) 
    If FilterType = acFilterByForm Then 
        Forms!Orders!TotalDue.Enabled = False 
    ElseIf FilterType = acFilterAdvanced Then 
        MsgBox "The best way to filter this form is to use the " _ 
            & "Filter By Form command or toolbar button.", vbOKOnly + vbInformation 
        Cancel = True 
    End If 
End Sub

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

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