Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 两次之间的倒计时计时器(非日期)_Vba_Excel_Timer - Fatal编程技术网

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+这是我的荣幸。我会在答案中加上你的评论。