两次倒数计时器(非日期)

时间:2014-07-07 13:54:38

标签: excel vba excel-vba timer

我有一个小小的" Job Timer"这让我可以看到我在工作上花了多长时间,以及我有多长时间完成一份工作。它看起来像这样:

Time Spent On Job Image

在工作上花费的时间是正确的,它工作正常,但是,剩余的时间需要工作的开始时间,将分配的工作时间添加到工作并产生一个"结束时间"。当我从"结束时间"中减去当前时间(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如何以这种方式处理时间和日期有严重的问题,我有什么明显的遗漏吗?

由于

1 个答案:

答案 0 :(得分:3)

使用=Time()代替Now

Now将返回当前日期和时间(DateTime),而Time()仅返回时间部分。

(不相关,但类似=Date()仅返回Now()的日期部分)

编辑:另外,作为理解日期/时间实施的附加参考,请注意以下BlackHawk的评论。