Microsoft Access 掲示板

フォームのボタンに期間抽出を組み込みたい。

4 コメント
views
4 フォロー

いつもお世話になっております。初歩的な質問だったらすみません。

月間請求書履歴というフォームがあり、クエリで期間を設定し表示しています。Runtimeで配布している人にも簡単にできるようにこのフォームの中に”1月”・”2月”というボタンを作ってしまいそれを押せば1ヶ月分がでるみたいなことをしたいので調べてはみたのですが、テキストボックスを使用するものとかパラメータクエリが出てきて知りたいことがわかりませんでした。こういうことは可能なのでしょうか。

true_grow
作成: 2020/12/11 (金) 09:56:00
通報 ...
1

フォームのFilterプロパティにVBAで抽出条件を設定するようにすればいいでしょう。

UIとしてはコマンドボタンより、コンボボックスで月を選択するようにするか、オプショングループ内にオプションボタンかトグルボタンを配置する設計にした方かいいでしょう。

まずは、コンボボックスの方が簡単なのでコンボボックスで作成してみて、うまくいったら、オプショングループに挑戦するのがいいでしょう。

まずはコンボボックスの方法を提示しておきます。

月間請求書履歴が帳票フォームとして、レコードソースに「売上日」という日付/時刻型のフィールドがあると仮定します。

「年」選択用のコンボボックスと「月」選択用のコンボボックスを配置します。

「年」コンボボックスを下記のように設定します。
名前 cb年
既定値 =Year(Date())
値集合タイプ 値リスト
値集合ソース 2018;2019;2020;2021;2022

「月」コンボボックスを下記のように設定します。
名前 cb月
既定値 =Month(Date())
値集合タイプ 値リスト
値集合ソース 1;2;3;4;5;6;7;8;9;10;11;12

「月」コンボボックスの更新後処理のイベントプロシージャに下記のように記述します。

Private Sub cb月_AfterUpdate()
    Dim BeginDay As Date
    BeginDay = DateSerial(Me.cb年, Me.cb月, 1)
    Me.Filter = "売上日>=#" & BeginDay & "# AND 売上日<#" & DateAdd("m", 1, BeginDay) & "#"
    Me.FilterOn = True
End Sub

「年」コンボボックスの更新後処理とフォームの読み込み時のイベントプロシージャを下記のように記述します。

Private Sub cb年_AfterUpdate()
    Call cb月_AfterUpdate
End Sub

Private Sub Form_Load()
    Call cb月_AfterUpdate
End Sub

以上です。

2
true_grow 2020/12/11 (金) 13:06:08 2f66f@538fa

できましたありがとうございます。これなら年も設定できるので楽になりました。
余談で少し質問なのですが何日から何日までという設定も月の中で設定できるものなのでしょうか
1月というコンボボックスで12/21~1/20までを表示のような。

3

「月」コンボボックスの更新後処理のイベントプロシージャを下記のように変更すればいいでしょう。

Private Sub cb月_AfterUpdate()
    Dim BeginDay As Date
    BeginDay = DateSerial(Me.cb年, Me.cb月 - 1, 21)
    Me.Filter = "売上日>=#" & BeginDay & "# AND 売上日<#" & DateAdd("m", 1, BeginDay) & "#"
    Me.FilterOn = True
End Sub
4
true_grow 2020/12/11 (金) 14:49:23 2f66f@538fa

少し加えるだけで出来てしまうのですね。ありがとうございました。
次はオプショングループに挑戦してみたいと思います。