问题在VBA中格式化时间

时间:2013-12-06 15:25:32

标签: excel vba excel-vba

我的格式存在很大问题。 当VBA写一个数字(Time() - actualtime)时,结果是以秒为单位,但excel认为这是几天! 所以,当我把这个命令: Selection.NumberFormat = "[h]:mm:ss.00"秒是天!

解决方案是添加/(24*3600),但这会给我一个错误,也许是因为它的数量非常小。

ActiveCell = ((Timer() - startTime)其中starttime是Timer()定义一段时间。

3 个答案:

答案 0 :(得分:3)

尝试

Timeserial(0,0,Time() - actualtime) 

Timeserial将返回一个时间值,并将所需的值放在“seconds”参数中将确保正确处理返回的数字。

请告诉我这是否有帮助!

答案 1 :(得分:1)

魅力。

actualtime / (24 * 3600)

在VBA中产生溢出错误。

actualtime / 24 / 3600

没有。

有关乘以24和3600的信息会产生溢出错误。

答案 2 :(得分:1)

这是由于类型转换。因为3600和24都是整数,所以将它们相乘的结果将转换为16位Int。 16位Int的范围为-32768到+32767

您可以通过运行以下不会出错的行并返回32767

来查看
MsgBox 32766 + 1

以下行由于超过最大值而失败并出现溢出错误。

MsgBox 32766 + 2

正如已经提到的那样,您可以通过单独划分值来避免这种情况

(Time() - actualtime) / 3600 / 24将有效..

此外,您可以告诉excel您要使用其他类型

 MsgBox (Time() - actualtime) / (24# * 3600)   'use Double
 MsgBox (Time() - actualtime) / (24& * 3600)   'use Long

24之后的散列或&符号告诉excel您希望将该值用作已定义的类型,并且这些语句不会因溢出错误而失败。