パソコン情報

【Access】カレンダーコントロールから非連結テキストボックスに入力した日付でフィルターする方法

テキストボックスに日付を入力する時に便利なのがカレンダーコントロールですが、

ココがダメ

更新後処理のイベントが実行されません

結局ボタンを増やして対応するしか方法がないのでしょうか!?

 

やりたい事はフィルター検索

やりたい事は、帳票表示されているレコードを、入力した日付でフィルターかけて検索したいというだけです。

せっかく日付を入力するなら、カレンダーコントロールを使ってマウス操作だけで入力できたら便利ですよね。

という事で、カレンダーコントロールを設置して、日付を入力した後、(更新後処理)でフィルターのVBAを実行させるようにしました。

 

Private Sub pu_date_mado_AfterUpdate()
    Me.Filter = "[pu_date]=#" & Me.pu_date_mado & "#"
    Me.FilterOn = True
End Sub

 

非連結のテキストボックスには、日付が入力されているのに、フィルターが実行されませんでした。

 

フォーカス取得時にカレンダー表示

ちなみに、フォーカスが日付を検索する非連結テキストボックスに移動すると、カレンダーが自動で表示される便利な状態にしていました。

Private Sub pu_date_mado_GotFocus()
  DoCmd.RunCommand acCmdShowDatePicker
End Sub

 

これは関係ないようですが、手動で別のテキストボックスにフォーカスを移動させて、再度日付をカレンダーから選択すると、フィルターが掛けることができました。しかし、こんなアクションからのフィルターはめんどくさくて使い物になりませんね。

 

更新後処理ではなく変更時

ネット検索して同じような症状で困っている案件を探しました。

やっぱり誰しもが自分と同じ状態で困っているようです。

そんな中の対策で、更新後処理ではなく、変更時にするという解決策がありました。

ココがダメ

自分の場合はダメでした(泣)

 

結局、ボタンを追加して処理

コンボボックスなら、選択した段階で、更新後処理かけられてフィルターできるのですが、カレンダーコントロールからの入力では、

日付を選択しただけでは値は入力されるもののアクションが実行できないのです。

結局、カレンダーコントロールから日付を入力してから、「抽出」というボタンをクリックしてフィルターを掛けるようにしました。

Private Sub select1_Click()
   Me.Filter = "[pu_date]=#" & Me.pu_date_mado & "#"
   Me.FilterOn = True
End Sub

 

コンボボックスのようにワンアクションでフィルターかけたかったのですが、カレンダーコントロールで日付入力してから、ボタンをクリックするという2アクション以上の操作になりました。

こういう所がAccessは使えないのですよねーーー。