#551 年・月・日を別々に入力してひとつの日付型データにまとめる方法 フォーム、VBA

フォーム上に「年」・「月」・「日」それぞれ単独のテキストボックスがあり、それらに入力された値をひとつにまとめて、日付型のフィールドと連結されたテキストボックスに代入する方法です。

例として次のようなデザインのフォームを用意します。
サンプルのフォームデザイン
上段の3つのテキストボックスは、「年」・「月」・「日」を入力するための、フィールドとは非連結のテキストボックス(名前はそれぞれtxt年・txt月・txt日)です。下段のテキストボックスは、上記3つの値をまとめて日付型として表示するためのテキストボックス(名前は売上日付)です。こちらはテーブルのフィールドと連結されています。

このような処理では、簡単に「Me!売上日付 = DateSerial(Me!txt年, Me!txt月, Me!txt日)」といった命令ひとつで済ませることもできますが、いずれかが未入力の場合、あるいは存在しない日付(たとえば9月31日など)が入力された場合のチェックなども加え、次のようなプログラムを用意してみました。

Private Sub txt年_AfterUpdate()
  cbfSetDate
End Sub

Private Sub txt月_AfterUpdate()
  cbfSetDate
End Sub

Private Sub txt日_AfterUpdate()
  cbfSetDate
End Sub

Private Sub cbfSetDate()

  Dim strNewDate As String

  '年・月・日から日付データを組み立て
  strNewDate = Me!txt年 & "/" & Me!txt月 & "/" & Me!txt日

  If IsDate(strNewDate) Then
    '日付の内容が正しいとき
    Me!売上日付 = CDate(strNewDate)
  ElseIf IsNull(Me!txt年) Or IsNull(Me!txt月) Or IsNull(Me!txt日) Then
    'いずれかが未入力のとき
    Me!売上日付 = Null
  Else
    '日付の内容に誤りがあるとき(存在しない日付など)
    MsgBox "日付の内容に誤りがあります!", vbOKOnly + vbExclamation
    Me!売上日付 = Null
  End If

End Sub



実行例:

●正しく入力されたとき
正しく入力されたとき

●未入力があるとき
未入力があるとき

●存在しない日付が入力されたとき
存在しない日付が入力されたとき
| Index | Prev | Next |



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