vba格式函数将数字错误地解释为日期
为什么VBA将“093 0005”解释为日期?vba格式函数将数字错误地解释为日期
在MS Access VBA,以下行: 格式( “093 0005”, “0000000000000”)返回 “0000000034090”
34090是日期1993年5月1日的VBA数字等效。
在大多数情况下,这种日期假设不会发生。例如:
格式(“092 0250”,“0000000000000”)返回“092 0250”,即不尝试应用格式。
格式(“0930005”,“0000000000000”)按预期返回“0000000930005”。
到目前为止,我唯一提出的解决方案是在入站字符串包含空格或使用IsDate函数时使用此函数进行编码。
这与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
。
感谢您的澄清。我想我很惊讶的是,该功能将数字解释为日期,当请求的格式不是日期样。你的解决方案在我的情况下工作。我也可以使用:De – 2012-08-04 11:28:09
Rick当你在即时窗口中输入'?格式(Val(“093 0005”),“0000000000000”)'你会得到什么? – 2012-08-04 16:02:54
我得到0000000930005 – 2012-08-05 17:36:48