Accessのテクストボックスで日付に曜日をつけて日付比較する

MSACCESS_eyecatch
SBMJOB

日付入力テキストボックスにデートピッカーを設置しましたが、曜日をつけてくれとの依頼で実装したものの上手く曜日は曜日が表示されず、かつ日付のエラーチェックが上手く動かなくなっちゃいました。そんなときの解決方法をご紹介します。

目次

スポンサーリンク

フォームとプロパティー概要

曜日付き日付テキストボックス
プロパティーシート

日付のテキストボックスにyyyy/mm/dd(曜日)と表示させての比較です。(曜)を別のテキストボックスを作ってそっちに表示させる方法もありますが今回は一つのテキストボックスに曜日まで入れた場合の判定を実装してみます。

日付を比較ボタンを押した結果

この例ではFromを左、Toを右と称して日付の大小を比較しています。

曜日を含むテキストボックスの挙動

テキストボックスに日付をテキストでセットする場合、
規定値でFormat(Now(),”yyyy/mm/dd(aaa)”)とすれば、曜日を日付の後ろに
セットすることができます。

しかしデートピッカーで変更すると曜日が消えてしまいます

さらに、日付の大小を比較するともちろんテキストなんでCdateで日付型に
キャストしてから比較するんですが、曜日(月)とか(火)等が入っているので
キャストできず型エラーになります

比較のための仕組み作り

そこでテキストボックスをlikeで *(*)* 文字パターンの存在チェックし
曜日がはいいていたら三文字取り除き、Cdateでキャストして日付比較します。

テキスト同士で比較すると絶対に予想しない動きをするので
必ずCdateで日付型にキャストしましょう。

日付の比較をしています。

Private Sub コマンド12_Click()'ボタンクリック
If changeToDateFormat(Me.txtDayFrom) > changeToDateFormat(Me.txtDayTo) Then
MsgBox ("左が大きいよ")
Else
MsgBox ("右が大きいよ")
End If
End Sub

このFunctionは曜日付きでも曜日なしでも日付をstringで受け取り、
必要に応じて日付削除処理を行い、Date型でかえしています。そうすれば日付比較ができます。

Private Function changeToDateFormat(ByVal recieveDate As String) As Date
 '曜日が含まれていたらチェックして後ろから三文字削除する。
 If recieveDate Like "*(*)*" Then
  Dim i As Integer
  i = Len(recieveDate)
  i = i - 3
  changeToDateFormat = CDate(Left(recieveDate, i))
 Else
  changeToDateFormat = CDate(recieveDate)
 End If
End Function

デートピッカーでの曜日消失対応仕組み作り

日付テキストボックスが更新されたら、以下の処理をおこない曜日を右から添える。

テキストボックスへの曜日付加セット処理

Private Sub txtDayFrom_AfterUpdate()
 Me.txtDayFrom = changeToYoubiAdd(Me.txtDayFrom)
End Sub
Private Sub txtDayTo_AfterUpdate()
 Me.txtDayTo = changeToYoubiAdd(Me.txtDayTo)
End Sub
Private Function changeToYoubiAdd(ByVal recieveDate As String) As String
 If recieveDate Like "*(*)*" Then
  '曜日あり
  changeToYoubiAdd = recieveDate
 Else
  '曜日なし
  changeToYoubiAdd = Format(CDate(recieveDate), "yyyy/mm/dd(aaa)")
 End If
End Function

まとめ

日付をテキストボックスでデートピッカーを使用しながらシステムに組み込むと若干めんどくさいですが、デートピッカーは便利なので使わない手はありません。その場合の問題点を解決してみました。考え方が原始的なので理解はしやすいと思いますので皆様ぜひ試してみてください。



スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメントする

CAPTCHA


目次