Microsoft Access 掲示板

フォーム日付入力時に範囲外の注意喚起をしたいのですが / 4

5 コメント
views
4 フォロー
4

#で囲めば日付型になると思ってました。

この辺はなかなか複雑なので、いろいろ試しているうちに理解できるようになるでしょう。
イミディエイトウィンドウで下記のように記述して、それぞれの行でEnterキーを押してみてください。

?TypeName(#2023/11/20#)

?TypeName("#" & "2023/11/20" & "#")

前者はDate、後者はStringになります。後者は最初の質問のコードの記述と同じことですね。

VBAの決まりとして、コード中で#で囲まれた部分はDate型とみなす、"で囲まれた部分は文字列とみなす、となってます。
"#" は " で囲まれている文字列です。
これは決まりなのでそうなっていると覚えておくしかないです。

一つ教えて頂きたいのですが変数でDate型にしたら IF式には#で囲まなくても自動的にそう認識されるのでしょうか?

Date型の変数に代入する場合、Date型以外の値、例えば文字列を代入する場合、日付と判断できるものはDate型に自動で変換してくれます。(「暗黙の型変換」といいます)
数値を代入すると日付シリアル値(記述日からの経過日数)と判断してDate型に変換します。

If文内の比較式で、型が違う値同士を比較すると、「暗黙の型変換」で型を揃えて比較しようとします。
ただ、「暗黙の型変換」がプログラマーの想定通りになるとは限らないので、できれば型を揃えて比較した方が確実です。

テキストボックスの書式に日付書式を設定していれば(例えば yyyy/mm/dd)、Date型の値が返りますが、
回答のコードは念のためにCDate関数でDate型に変換して、Date型の変数と比較しています。

If CDate(Me.[入力日付]) >= kaisi And CDate(Me.[入力日付]) <= owari Then
通報 ...