• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Me.FilterOn = True は先でも後で)

Me.FilterOn = Trueの位置による挙動の違いについて

このQ&Aのポイント
  • Me.FilterOn = Trueの位置による挙動の違いについて説明します。
  • VBAでアクセスのフォームにフィルタをかける際、Me.FilterOn = Trueの位置には制約がありません。
  • Me.FilterOn = TrueをMe.Filterの前または後に書くことができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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回) という事になるのでしょうか。 ※ 私の環境でのものなので、検証はしてください。

eurytdd
質問者

お礼

ありがとうございます。参考になりました!!!

関連するQ&A