Accessについての忘備録です。
テキストボックスの日付を更新したらリストの値を更新したい(VBA)
日付書式のテキストボックスを作成してイベントを割り当てただけではリストボックスは更新されません。
今回僕がやりたかったのは、「日付の範囲を変更するとリストの内容がその範囲に絞り込まれる」です。
以下は具体例です。
テキストボックス「day1・day2」に本日の日付を表示させる
フォームの読み込み時イベントに以下を書きます。
Me.day1 = DateSerial(Year(Date),Month(Date),1)→月初の日付を指定したい場合はDateSerialを使います。(本日の日付でよければ普通に、Me.day1 = Date()でOKです。
Me.day1発火→Me.day1と同じ
Me.day2= DateSerial(Year(Date),Month(Date) + 1,0)→月末の日付を指定したい場合はMonthに+1します。つまり、次の月の0日と指定します。0日は前月の最終日を指します。
Me.day2→Me.day2と同じ
最後にMe.Requeryでページを更新するとフォームが当月の日付が表示された状態で開きます。
テキストボックスAの日付を変更する→その日付以降の値が表示される
1.テキストボックス1の作成…フォームにテキストボックスを作り名前を「day1」とする。
2.テキストボックス2の作成…フォームにテキストボックスを作り名前を「day1発火」とする。
3.テキストボックス3の作成…フォームにテキストボックスを作り名前を「day2」とする。
4.テキストボックス4の作成…フォームにテキストボックスを作り名前を「day2発火」とする。
※各フォームの名前はお好きなものでOKです。
day1の「変更時」にイベントプロシージャを設定し、以下のように書く。
Me.day1発火.setforcus
Me.day1発火 = Me.day1
'他に処理があればここに書く
Me.Requery
このコードではday1発火にフォーカスを当ててからMe.day1を代入します。これでday1を変更するとイベントが発火し、day1発火に選択した値が入ります。
あとはクエリで日付フィールドを追加して抽出条件に「[Form]![フォーム名]![day1発火]」とすると、フォームが開いたときにday1発火の日付に絞り込まれます。(フォームの詳細欄に日付フィールを置くことをお忘れずに。)
ただこれだけだとday1の値でしか絞り込まれないので範囲指定する場合は、day2にもday1と同じように設定して上で、クエリの絞り込み条件を以下のように変更します。
Between [Forms]![フォーム名]![day1発火] And [Forms]![フォーム名]![day2発火]
こうするとリストの値がday1〜day2の期間で絞り込まれます。