问题在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会产生溢出错误。