#550 日付データを年・月・日別々のテキストボックスに表示する方法 フォーム、VBA

テーブル上のフィールドのデータ型が「日付/時刻型」となっているデータをそのままフォームのテキストボックスに表示すると、「年月日」(場合によっては時分秒も含む)の形式で表示されます。また今日の日付を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 年・月・日を別々に入力してひとつの日付型データにまとめる方法」を参考にしてください。

実行例:
実行例1
実行例2
実行例、新規レコードの場合←新規レコードの場合
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved