Vba 两次之间的倒计时计时器(非日期)
我有一个小的“工作计时器”,可以让我看到我在工作上花了多长时间,还有多长时间可以完成一项工作。看起来是这样的: 在作业上花费的时间是正确的,工作正常,但是剩余的时间将占用作业的开始时间,将分配的作业时间添加到作业中,并生成“结束时间”。当我从“结束时间”中减去当前时间(Vba 两次之间的倒计时计时器(非日期),vba,excel,timer,Vba,Excel,Timer,我有一个小的“工作计时器”,可以让我看到我在工作上花了多长时间,还有多长时间可以完成一项工作。看起来是这样的: 在作业上花费的时间是正确的,工作正常,但是剩余的时间将占用作业的开始时间,将分配的作业时间添加到作业中,并生成“结束时间”。当我从“结束时间”中减去当前时间(Now())时,我得到了奇怪的结果 这是我的密码: Public dismissed As Boolean Public TimeUpdate As Integer Public Function TimeSpent( _ O
Now()
)时,我得到了奇怪的结果
这是我的密码:
Public dismissed As Boolean
Public TimeUpdate As Integer
Public Function TimeSpent( _
Optional TimeStarted As Variant, _
Optional Allocated As Variant, _
Optional TU)
If Not IsMissing(TimeStarted) Then
TimeSpent = Now() - TimeValue(TimeStarted)
End If
End Function
Public Function Remaining( _
Optional TimeStarted As Variant, _
Optional Allocated As Variant)
If Not IsMissing(Allocated) And Not IsMissing(TimeStarted) Then
EndTime = TimeValue(Allocated) + TimeValue(TimeStarted)
Remaining = EndTime - Now()
End If
End Function
Public Sub TS()
x = Now() + TimeSerial(0, 0, 1)
TimeSpentForm.Spent.Caption = TimeSpent(Job.StartTime1.Value, Job.ACT.Value, TimeUpdate)
TimeSpentForm.Spent.Caption = Format(TimeSpentForm.Spent.Caption, "hh:mm:ss")
TimeSpentForm.Remaining.Caption = Remaining(Job.StartTime1.Value, Job.ACT.Value)
TimeSpentForm.Remaining.Caption = Format(TimeSpentForm.Remaining.Caption, "hh:mm:ss")
If dismissed = False Then
Application.OnTime x, "TS"
End If
End Sub
当调用例程TS
时,计时器启动并显示表单,例程将继续运行,直到按下“解除”按钮(此操作正常)。但是在这个过程中的某个地方,代码出错了,它不是从“1:00:00”(在这个特殊情况下是分配的时间)开始倒计时,而是减去“1:00:00”,然后到“23:00:00”,然后再进行计数
我以前在VBA如何以这种方式处理时间和日期方面遇到过严重的问题,这里是否有明显的遗漏
谢谢使用=Time()
而不是现在使用
Now
将返回当前日期和时间(DateTime),而time()
只返回时间部分
(不相关,但类似地,=Date()
只返回Now()
的日期部分)
编辑:另外,作为理解日期/时间实施的补充参考,请注意BlackHawk在下面的评论。Wow。。这么简单,立刻修复了故障。我还不能接受这个答案,因为发帖和允许回答之间的时间限制。但我会尽快接受的!作为这个答案的补充,Excel
Date
值在幕后实际上是双倍的。Excel日期时间的日期时间为1900年1月0日。datetime值的整数部分是自1900年1月0日以来的天数,小数部分是时间,即过去一天的分数。例如,1.5是1900年1月1日中午12点。您可以在Excel中正常键入日期和时间(例如“7/7/2014 10:25 AM”),然后将单元格格式化为数字,从而查看其基本值。非常好,@Blackhawk+这是我的荣幸。我会在答案中加上你的评论。