Accessのテクストボックスで日付に曜日をつけて日付比較する
サイトが引っ越しました。→https://scombu.com
約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。
テキストボックスに日付をテキストでセットする場合、
規定値でFormat(Now(),"yyyy/mm/dd(aaa)")とすれば、曜日を日付の後ろに
セットすることができますが、デートピッカーで変更すると曜日が消えてしまいます。
さらに、日付の大小を比較するともちろんテキストなんでCdateで日付型に
キャストしてから比較するんですが、曜日(月)とか(火)等が入っているので
キャストできず型エラーになります。
そこでテキストボックスをlikeで *(*)* 文字パターンの存在チェックし
曜日がはいいていたら三文字取り除き、Cdateでキャストして日付比較します。
テキスト同士で比較すると絶対に予想しない動きをするので
必ずCdateで日付型にキャストしましょう。
日付テキストボックスが更新されたら、以下の処理をおこない曜日を右から添える。
Private Sub txtDayFrom_AfterUpdate() Me.txtDayFrom = changeToYoubiAdd(Me.txtDayFrom) End Sub Private Sub txtDayTo_AfterUpdate() Me.txtDayTo = changeToYoubiAdd(Me.txtDayTo) 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 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
日付の比較をしています。
Private Sub コマンド12_Click() If changeToDateFormat(Me.txtDayFrom) > changeToDateFormat(Me.txtDayTo) Then MsgBox ("左が大きいよ") Else MsgBox ("右が大きいよ") End If End Sub