我有一个小小的" Job Timer"这让我可以看到我在工作上花了多长时间,以及我有多长时间完成一份工作。它看起来像这样:
在工作上花费的时间是正确的,它工作正常,但是,剩余的时间需要工作的开始时间,将分配的工作时间添加到工作并产生一个"结束时间"。当我从"结束时间"中减去当前时间(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如何以这种方式处理时间和日期有严重的问题,我有什么明显的遗漏吗?
由于
答案 0 :(得分:3)
使用=Time()
代替Now
Now
将返回当前日期和时间(DateTime),而Time()
仅返回时间部分。
(不相关,但类似=Date()
仅返回Now()
的日期部分)
编辑:另外,作为理解日期/时间实施的附加参考,请注意以下BlackHawk的评论。