为什么VBA将“093 0005”解释为约会?
在MS Access VBA中,以下行: 格式(“093 0005”,“0000000000000”)返回“0000000034090”
34090是日期5/1/1993的vba数字等价物。
在大多数情况下,不会发生这种日期假设。例如:
格式(“092 0250”,“0000000000000”)返回“092 0250”,即不尝试应用格式。
格式(“0930005”,“0000000000000”)按预期返回“0000000930005”。
到目前为止,我提出的唯一解决方案是在入站字符串包含空格或使用IsDate函数时使用此函数进行编码。
答案 0 :(得分:4)
这与Access本身无关。在任何VBA中,如果文本由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
但是,如果数字由HYPHEN
或DASH
分隔,则VAL
功能无效。为此,您必须使用REPLACE
将HYPHEN
或DASH
替换为SPACE
。但是,我怀疑您是否会格式化具有HYPHEN
或DASH
的数字。