VBA时间差(以秒为单位)

时间:2019-01-18 07:19:24

标签: excel vba

我希望仅在两个连续的活动之间至少有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到当前时间的时差,而不是当前时间和最新添加的收藏品之间的时差。有人建议这个问题吗?

2 个答案:

答案 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相乘会得到秒数。