4

为什么 VBA 将“093 0005”解释为日期?

在 MS Access VBA 中,以下行:Format("093 0005", "0000000000000") 返回 "0000000034090"

34090 是日期 5/1/1993 的 vba 数字等价物。

在大多数情况下,这种日期假设不会发生。例如:

Format("092 0250", "0000000000000") 返回“092 0250”,即不尝试应用格式。

Format("0930005", "0000000000000") 按预期返回“0000000930005”。

到目前为止,我想出的唯一解决方案是在入站字符串包含空格或使用 IsDate 函数时使用此函数进行编码。

4

1 回答 1

4

这与 Access 本身无关。在任何 VBA 中,如果文本由 a 、 或 a 分隔,格式函数的行为将SPACE如下HYPHEN所示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.

不幸的是,我在 MS 知识库中找不到任何文章来解释为什么 Format 函数会这样。

我过去发现解决它的唯一方法是使用该VAL函数将其转换为数字。所以

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

会给你想要的结果0000000930005

但是,如果数字由 aHYPHEN或 a分隔,DASH则该VAL功能无用。为此,您将不得不使用REPLACEHYPHENorDASH替换为SPACE。但是我怀疑您是否会格式化具有 aHYPHEN或 a 的数字DASH

于 2012-08-03T19:33:58.337 回答