テーブル上のフィールドのデータ型が「日付/時刻型」となっているデータをそのままフォームのテキストボックスに表示すると、「年月日」(場合によっては時分秒も含む)の形式で表示されます。また今日の日付をDate関数で取得して表示ような場合も同様です。
ここでは、そのような日付のデータを、「年」・「月」・「日」それぞれ別々のテキストボックスに表示する方法を紹介します。
例として次のようなデザインのフォームを用意します。
このフォームには4つのテキストボックスが配置されています。1つは、あるテーブルの「売上日付」という日付/時刻型フィールドと連結されたテキストボックス(名前は売上日付)、他の3つはフィールドと非連結の「年」・「月」・「日」を表示するテキストボックス(名前はそれぞれtxt年・txt月・txt日)です。
- ●コントロールソースで設定する方法
- 「年」・「月」・「日」のテキストボックスの「コントロールソース」プロパティを次のように設定します。
・txt年・・・・ =Year([売上日付])
・txt月・・・・ =Month([売上日付])
・txt日・・・・ =Day([売上日付])
- この場合、各テキストボックスの値を編集することはできません。
- ●VBAで代入する方法
- フォームの「レコード移動時」イベントプロシージャに次のようなコードを記述します。
Private Sub Form_Current()
'フォームのレコード移動時
If Not IsNull(Me!売上日付) Then
Me!txt年 = Year(Me!売上日付)
Me!txt月 = Month(Me!売上日付)
Me!txt日 = Day(Me!売上日付)
Else
Me!txt年 = Null
Me!txt月 = Null
Me!txt日 = Null
End If
End Sub
- ここで売上日付がNullかどうかで条件分岐しているのは、フォーム上で新規レコードに移動したとき、あるいはテーブル上の売上日付データが空のときにエラーが起らないようにするためです。Null値であるとYear関数などでエラーが発生してしまいます。
- またこのプログラムは、フォームが開いたときやレコード移動が起こったときにだけ実行されます。もし売上日付のテキストボックスの内容が更新されたときに直ちに「年」・「月」・「日」に反映させたいときには、売上日付のテキストボックスの更新後処理イベントプロシージャにも同様のコードを記述します。
- またこの方法では、各テキストボックスの値を編集することができます。なお、編集した結果を「売上日付」のテキストボックスに反映させてテーブルに保存したい場合には「#551 年・月・日を別々に入力してひとつの日付型データにまとめる方法」を参考にしてください。
実行例:
←新規レコードの場合 |