我的格式存在很大问题。
当VBA写一个数字(Time() - actualtime
)时,结果是以秒为单位,但excel认为这是几天!
所以,当我把这个命令:
Selection.NumberFormat = "[h]:mm:ss.00"
秒是天!
解决方案是添加/(24*3600)
,但这会给我一个错误,也许是因为它的数量非常小。
ActiveCell = ((Timer() - startTime)
其中starttime是Timer()
定义一段时间。
答案 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您希望将该值用作已定义的类型,并且这些语句不会因溢出错误而失败。