#666 | 日付の期間を一度に入力するサンプルプロシージャ | フォーム、VBA | |||||||||||||||||||||||||||||||||||||||
フォームに配置した2つのテキストボックスの日付の期間(自〜至)を参照して、パラメータクエリのWhere条件としたり、フォームのフィルタ条件としたり、あるいはレポートを開く際のWhere条件としたりといったことがあります。 そのようなインタフェースでしばしば入力する一定期間のパターンがある場合、それをボタンのワンクリックで入力できるようにすると操作が楽になります。たとえば、現在日付からみて「今月(1日〜末日)」の2つを入力する、「今年(1月1日〜12月31日)」の2つを入力するといったような場合です。 そのようなときに使える、2つの日付入力用のテキストボックスに所定の期間を一度に入力するための汎用的なサンプルプロシージャ例を紹介します。 なお、このプロシージャの呼び出しは各ボタンのクリック時イベントプロシージャから行うこともできますが、ボタンを簡単に他のフォームにも流用できるよう、ここでは”Function”プロシージャとして作成することでフォームのデザインビューのプロパティシートでその設定をできるようにします。 そのプロシージャ例は次のようなものです。そのフォームのモジュールに記述してもよいですが、いろいろなフォームで使えるものですので、”標準モジュール”に記述しておくとよいと思います。 Public Function SetDateTerm(Interval As String, Number As Long, _ txtStart As TextBox, txtEnd As TextBox) '日付の期間を2つのテキストボックスに代入するプロシージャ Dim lngWeekNum As Long Dim intCurNendo As Integer Select Case Interval Case "d" '日 'Number日分加減算した日付を自至両方に代入 txtStart = DateAdd("d", Number, Date) txtEnd = DateAdd("d", Number, Date) Case "ww" '週 '今日の曜日を取得して lngWeekNum = Weekday(Date) 'Number週分加減算した週の日曜を自に代入 txtStart = DateAdd("d", 1 - lngWeekNum + 7 * Number, Date) 'Number週分加減算した週の土曜を至に代入 txtEnd = DateAdd("d", 7 - lngWeekNum + 7 * Number, Date) Case "m" '月 'Number月分加減算した月の1日を自に代入 txtStart = DateSerial(Year(Date), Month(Date) + Number, 1) 'Number月分加減算した月の月末日を至に代入 txtEnd = DateSerial(Year(Date), Month(Date) + 1 + Number, 0) Case "yyyy" '年 'Number年分加減算した年の1月1日を自に代入 txtStart = DateSerial(Year(Date) + Number, 1, 1) 'Number年分加減算した年の12月31日を至に代入 txtEnd = DateSerial(Year(Date) + Number, 12, 31) Case "ynd" '年度 '今日の年度を取得してNumber年分加減算 intCurNendo = IIf(Month(Date) >= 4, Year(Date), Year(Date) - 1) + Number 'その年の4月1日を自に代入 txtStart = DateSerial(intCurNendo, 4, 1) 'その翌年の3月31日を至に代入 txtEnd = DateSerial(intCurNendo + 1, 3, 31) End Select End Function このプロシージャの引数は下記の4つです。
上記のプロシージャは、下記のようにフォームのデザインビューからプロパティシート上で設定して呼び出します。 上図のサンプルでは15ケのコマンドボタンが配置されていますが、それぞれ下表のようにプロパティを設定します。第3引数と第4引数はすべて同じですが、第1引数・第2引数を見渡して比べてみると引数指定の要領が分かると思います。
実行例:
|
|||||||||||||||||||||||||||||||||||||||||
|
Copyright © T'sWare All rights reserved |