4

VBA が "093 0005" を日付として解釈するのはなぜですか?

MS Access VBA では、次の行: Format("093 0005", "0000000000000") は "0000000034090" を返します。

34090 は、1993 年 5 月 1 日の日付に相当する vba 数値です。

ほとんどの場合、この種の日付の仮定は発生しません。例えば:

Format("092 0250", "0000000000000") は "092 0250" を返します。つまり、フォーマットを適用しようとしません。

Format("0930005", "0000000000000") は、期待どおり "0000000930005" を返します。

私がこれまでに思いついた唯一の解決策は、インバウンド文字列にスペースが含まれている場合にこの関数を使用するか、IsDate 関数を使用することです。

4

1 に答える 1

4

これは Access 自体とは何の関係もありません。SPACEどの VBA でも、テキストが、HYPHEN、または で区切られている場合、format 関数は次のように動作しますDASH。したがって、この

Debug.Print Format("093 0005", "0000000000000") 
Debug.Print Format("093/0005", "0000000000000") 
Debug.Print Format("093-0005", "0000000000000") 

戻ります0000000034090

それを日付または数値に変換しようとし、それが有効な日付または数値である場合は、それに相当する数値を表示します。そして、それが日付または数値に相当するものでない場合は、そのまま残します。この理由は、Format関数が値の「フォーマット」を確認できず、文字列として受け取るためだと思います。それは言っているのに似ていますFormat("Blah", "0000000000000")Format関数が としてフォーマットすることを期待しないことは明らかです000000000blah

残念ながら、なぜ Format 関数がこのように動作するのかを説明している MS ナレッジ ベースの記事を見つけることができませんでした。

これを回避するために過去に発見した唯一の方法は、VAL関数を使用して数値に変換することです。そう

Debug.Print Format(Val("093 0005"), "0000000000000") 

望ましい結果が得られます0000000930005

HYPHENただし、数値が aまたは aで区切られているDASH場合、VAL関数は役に立ちません。そのためには、またはをREPLACEに置き換えるために使用する必要があります。ただし、またはを含む数値をフォーマットすることはないと思います。HYPHENDASHSPACEHYPHENDASH

于 2012-08-03T19:33:58.337 に答える