Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-十进制到时间-错误值_Vba_Time_Decimal - Fatal编程技术网

VBA-十进制到时间-错误值

VBA-十进制到时间-错误值,vba,time,decimal,Vba,Time,Decimal,我是这个社区的新手,所以如果我犯了任何新手错误,请在这篇文章中批评你想要的一切 我目前正忙于一项任务。我对VisualBasic有些陌生,但到目前为止,我的理解相当不错。然而,我似乎无法得到一个基本的操作排序。我已经在互联网上搜索了一两天,头撞在墙上。希望你能帮我解决这个问题 我正在从Oracle数据库导入不同订单的周期时间。它们作为十进制值(小时数)返回到列中,但我希望它们显示为“longtime”(“hh:mm:ss”)。我所读到的,它应该是一样容易除以24和改变格式。但是,这在使用单元格值

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

我目前正忙于一项任务。我对VisualBasic有些陌生,但到目前为止,我的理解相当不错。然而,我似乎无法得到一个基本的操作排序。我已经在互联网上搜索了一两天,头撞在墙上。希望你能帮我解决这个问题

我正在从Oracle数据库导入不同订单的周期时间。它们作为十进制值(小时数)返回到列中,但我希望它们显示为“longtime”(“hh:mm:ss”)。我所读到的,它应该是一样容易除以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
但是

这显然是不正确的。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。尽管有这种
格式(ws.Cells(i,6)/24,“hh:mm:ss”)
≠<代码>格式(0.05/24,“hh:mm:ss”)

我试过乱用数字格式(字符串、日期等),
.Value
.Value2

有人知道发生了什么,为什么会这样吗


提前感谢您的时间。

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

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


我认为您需要检查日期/时间和语言设置,以确保它们设置正确。

?格式(ws.Cells(i,6)/24,“hh:mm:ss”)
给我提供
00:03:00
尝试在新工作簿中手动键入,看看是否得到相同的结果?执行
时,
i
的值是否相同?ws.Cells(i,6)
当您执行
时?格式(ws.Cells(i,6)/24,“hh:mm:ss”)
?同样有趣的是,它显示了
0.050000
而不是
0.05
作为
的答案?ws.Cells(i,6)
。同样有趣的是,
1905-09-13 08:00:00
*24给出50000。您使用的Excel语言版本是什么?你用的是什么语言环境?您是使用
作为小数点,还是使用
作为千位分隔符?@SiddharthRout如果使用
作为小数点,您将得到
00:03:00
,但是,如果您的区域设置将其用作千位分隔符,它会认为您正在执行
50000/24
,它给出的日期/时间为
1905-09-13 08:00:00
。正确。事实确实如此。我的解决方案是用
替换单元格中的
。除非我遇到更多这样的情况,否则我不想弄乱默认设置。非常感谢。
? 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