VBA - 十进制到时间 - 无论如何都是错误的值

时间:2017-06-27 08:55:48

标签: vba time decimal

我是这个社区的新手,所以如果我犯了任何新手的错误,请在这篇文章中批评你想要的一切。

我目前正在执行任务。我对视觉基础有点新,但到目前为止我的理解还算不错。但是,我似乎无法对基本操作进行排序。我已经在互联网上搜索了一下,然后把头撞在了墙上一两天了。希望你可以帮我解决这个问题。

我从Oracle数据库导入不同订单的周期时间。它们作为十进制值(小时数)返回到列中,但我希望它们显示为" Long Time" (" HH:MM:SS&#34)。我所读到的,应该像除以24并改变格式一样简单。但是,使用单元格值时,这会给出错误的值。

示例:

? ws.Cells(i,6) 'Cycle times are placed in column 6 while looping over rows i.
0.050000
? Format(0.050000/24, "hh:mm:ss")
00:03:00

? Format(ws.Cells(i,6)/24,"hh:mm:ss")
08:00:00

显然不正确。 0.05小时相当于3分钟。我也发现了日期值的变化:

? Format(0.05/24, "yyyy-mm-dd hh:mm:ss")
1899-12-30 00:03:00

? Format(ws.Cells(i,6)/24, "yyyy-mm-dd hh:mm:ss")
1905-09-13 08:00:00

这怎么可能!? ws.Cells(i,6)返回0.05。尽管如此Format(ws.Cells(i,6)/24,"hh:mm:ss")Format(0.05/24,"hh:mm:ss")

我已尝试弄乱数字格式(字符串,日期等),.Value.Value2

有人知道发生了什么以及为什么会这样吗?

感谢您提前抽出时间。

1 个答案:

答案 0 :(得分:0)

问题似乎源于这样一个事实:您的计算机认为0.050000实际上不是数字0.05,而实际上是一个被解释为50000的字符串。

因此,当您将50000除以12时,您会得到1905-09-13 08:00:00的日期/时间,当使用08:00:00格式时,该日期/时间仅显示为"hh:mm:ss"

我认为你需要查看你的日期/时间&语言设置,以确保它们设置正确。