- ベストアンサー
Me.FilterOn = Trueの位置による挙動の違いについて
- Me.FilterOn = Trueの位置による挙動の違いについて説明します。
- VBAでアクセスのフォームにフィルタをかける際、Me.FilterOn = Trueの位置には制約がありません。
- Me.FilterOn = TrueをMe.Filterの前または後に書くことができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
興味もあって2007でやってみました。 私の今までの書き方) If (Len(sWhereCondition) = 0) Then Me.FilterOn = False Me.Filter = "" Else Me.Filter = sWhereCondition Me.FilterOn = True End If ここで、 Me.FilterOn = False 状態の時、Me.Filter を変更しても何も起きません Me.FilterOn = True 状態の時、 ・ Me.Filter を変更すると、再クエリが発生しました ・ Me.FilterOn = True を再設定しても再クエリされませんでした Me.FilterOn = False 状態の時、 Me.Filter = sWhereCondition Me.FilterOn = True ' ★ か Me.FilterOn = True ' ★ ' ☆ Me.Filter = sWhereCondition ' ★ の記述にすると ★ で再クエリが発生しました。 ただ、☆ 時に Me.Filter = "" なら True にはなりませんでいた。 True にならない可能性があるので、 Me.Filter = sWhereCondition Me.FilterOn = True が正しい順と思われます。 Me.FilterOn = True 状態の時、 Me.Filter = "" か Me.FilterOn = False でフィルタ解除されました。 Me.FilterOn = False 時に Me.FilterOn = False しても変化はありませんでした。 ただ、Me.Filter = "" とすると自動で Me.FilterOn = False に変化。 また、Me.Filter = "" 時に Me.FilterOn = True にはできませんでした。 これらの動きをまとめてみると、 Me.Filter = sWhereCondition ' ★1 Me.FilterOn = True ' ★2 だけで良さそうです。 (sWhereCondition = "" なら FilterOn は自動で False になって True にできない) Me.FilterOn = True 状態の実行では、★1で再クエリ Me.FilterOn = False 状態の実行では、★2で再クエリ てな動きになるのでしょうか・・・ なので、ご質問への回答としては、 Me.FilterOn = True Me.Filter = "フィールド = '" & "test" & "'" と記述すると、 実施前 Me.Filter = "" であれば、フィルタはかからない。 実施前 Me.Filter = "" でなければ、最悪2回再クエリすることになる。 (実施前 Me.FilterOn = False だったら2回) (実施前 Me.FilterOn = True だったら1回) という事になるのでしょうか。 ※ 私の環境でのものなので、検証はしてください。
お礼
ありがとうございます。参考になりました!!!