问题在VBA中格式化时间

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

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

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

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

你可以通过运行下面一行来看到这个错误,并返回32767

 MsgBox 32766 + 1 

而下面的线路由于超过最大值而发生溢出错误。

 MsgBox 32766 + 2 

正如已经提到的,你可以通过分开的值来规避这一点

(Time() - actualtime) / 3600 / 24将工作..

另外,你可以告诉excel你想使用不同的types,

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

24之后的散列或符号告诉excel你希望该值被用作定义的types,这些语句不会因为溢出错误而失败。

尝试

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

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

让我知道这是否有帮助!

迷人。

 actualtime / (24 * 3600) 

在VBA中产生溢出错误。

 actualtime / 24 / 3600 

才不是。

乘法24和3600会产生溢出错误。