Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
年2桁の日付の入力チェックについて
投稿日時: 17/11/24 10:32:25
投稿者: 7986

テーブル「tbl受注」に日付時刻型フィールド「納期」があります。
このテーブルを元にクエリ「qry受注」があり、
このクエリをレコードソースとした帳票フォーム「frm受注」があります。
フォーム上には「納期」をコントロールソースとしたテキストボックス「txt納期」があります。
 
テーブル上、「納期」は年4桁でYYYY/MM/DDの形で登録されていますが、
「frm受注」上では表示スペースの関係で年2桁で表示させたく、
「txt納期」の書式には「yy/mm/dd」と指定しています。
また定型入力には、「00/00/00;0;_」と指定してあります。
 
このフォームで「txt納期」を変更する際、
間違えて「17/09/31」と入力し、フォーカスを移動させると「31/09/17」となり、
ISDATE関数でチェックしてもTRUEとなってしまいます。
デバッグモードでtxt納期の状態を見ると「1931/09/17」となっています。
日付の範囲を設けてありえない期間はエラーにするなどのチェック方法はありますが、
「2017/09/31」はありえないと判断させるにはどうしたらいいでしょうか?
 
年2桁の入力は今後は避けようと思いますが、
現状稼働しているシステムで表示スペースが限られているので、
何とか年2桁で対応できるとありがたいです。

回答
投稿日時: 17/11/24 11:05:45
投稿者: sk

引用:
このフォームで「txt納期」を変更する際、
間違えて「17/09/31」と入力し、フォーカスを移動させると「31/09/17」となり、
ISDATE関数でチェックしてもTRUEとなってしまいます。

引用:
「2017/09/31」はありえないと判断させるにはどうしたらいいでしょうか?

(フォームモジュール)
------------------------------------------------------------
'[txt納期]の[更新前処理]イベント
Private Sub txt納期_BeforeUpdate(Cancel As Integer)
 
    Dim strDate As String
     
    If Me![txt納期].Text Like "##/##/##" Then
        strDate = Format(CDate(Me![txt納期].Text), "yy/mm/dd")
        If Me![txt納期].Text <> strDate Then
            MsgBox "入力された日付が正しくありません!", _
                   vbExclamation, _
                   "入力エラー"
            Cancel = True
            Exit Sub
        End If
    End If
 
End Sub
------------------------------------------------------------
 
以上のような感じでしょうか。

投稿日時: 17/11/24 12:05:11
投稿者: 7986

skさん、回答ありがとうございます。
更新前イベントで、テキストボックスの値(VALUE)ではなく、
1)文字列(text)を取得して、
2)文字列(text)を日付型に変換し、
3)変換された日付と、入力した文字列(TEXT)を比較して
4)一致しないからエラー
ということですね!!
 

引用:

    If Me![txt納期].Text Like "##/##/##" Then

 
 Like "##/##/##" にはどういう意味があるんでしょうか?

回答
投稿日時: 17/11/30 13:51:17
投稿者: sk

引用:
Like "##/##/##" にはどういう意味があるんでしょうか?

VBA の Like 演算子によるパターンマッチングにおいて、
"#" は「任意の 1 文字の数字」( 0 〜 9 )を
表すワイルドカード文字です。
 
引用:
定型入力には、「00/00/00;0;_」と指定してあります。

要は、上記と同じ形式の文字列が入力されたかどうかを
コード上で判別させているだけです。

投稿日時: 17/11/30 14:17:37
投稿者: 7986

SKさん、回答ありがとうございました!!
大変勉強になりました。