我希望仅在两个连续的活动之间至少有60秒的时间间隔时才进行活动。我有以下代码:
Sub timediff()
Dim Psos As New Collection
Dim currtime As Date
Dim dummytime As Date
Dim diffoftime As Long
If Psos.Count = 0 Then
dummytime = "9:00:00"
Psos.Add dummytime
End If
currtime = Format(Now(), "hh:mm:ss")
diffoftime = DateDiff("s", CDate(Psos.Item(Psos.Count)), CDate(currtime))
If diffoftime > 60 Then
Debug.Print diffoftime
Psos.Add currtime
End If
End Sub
但是我总是得到从9:00:00到当前时间的时差,而不是当前时间和最新添加的收藏品之间的时差。有人建议这个问题吗?
答案 0 :(得分:1)
每次调用timediff时,Psos都会重置为空...不确定为什么需要一个集合,只需创建一个全局Date变量并与之比较,或者在一个过程中进行所有操作即可:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Public Sub OneMinuteLoop()
Dim dtmNow As Date
Dim dtmLastUpdate As Date
Do While True
dtmNow = Now()
If DateDiff("s", dtmLastUpdate, dtmNow) > 30 Then
'Do something
dtmLastUpdate = dtmNow
End If
Sleep 5000
DoEvents
Loop
End Sub
答案 1 :(得分:1)
为什么不简单地将Now()
工作表函数的两个结果之间的差值,然后将其乘以86400,而不进行任何格式化?
Now()
给出了现在的日期时间,单位是天。由于一天之内有86400秒,所以将差值与86400相乘会得到秒数。