当其他模块在VBA项目中运行时,excel工作簿中的运行时钟停止

时间:2015-09-02 03:16:30

标签: excel excel-vba vba

我的excel工作簿上有一个运行时钟,每当我在工作簿中运行其他代码时,时钟就会停止。每当发生这种情况时,我必须始终开始时钟。时钟有没有自动运行而不是我必须实现它并点击它?

2 个答案:

答案 0 :(得分:2)

也许这会有所帮助:

Option Explicit

Private clockStart As Boolean

Sub runClock(ByVal flag As Boolean)
    Dim functionWithParam As String
    Range("A1").Value = Now():  DoEvents
    functionWithParam = "'runClock " & Chr(34) & flag & Chr(34) & "'"
    If clockStart Then Application.OnTime Now + TimeSerial(0, 0, 1), functionWithParam
End Sub

Sub startClock()
    clockStart = True
    runClock True
End Sub

Sub stopClock()
    clockStart = False
End Sub

或此版本:

Option Explicit

#If VBA7 Then   '64 Bit Systems
    Public Declare PtrSafe Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As LongPtr)
#Else           '32 Bit Systems
    Public Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds as Long)
#End If

Private clockStart As Boolean

Sub runClock()
    While clockStart
        Range("A1").Value = Now()
        Sleep 1000
        DoEvents
    Wend
End Sub

Sub startClock()
    clockStart = True
    runClock
End Sub

Sub stopClock()
    clockStart = False
End Sub

答案 1 :(得分:1)

Application.OnTime method的可选 LatestTime 参数留空时,不要尝试使用默认的无限期等待,为什么不整合您可能在其他代码中使用的几个应用程序事件“不管怎样?

Public Sub appTGGL(Optional bTGGL As Boolean = True)
    Application.ScreenUpdating = bTGGL
    Application.EnableEvents = bTGGL
    Application.DisplayAlerts = bTGGL
    Application.Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual)
    If bTGGL Then
        startClock
    Else
        stopClock
    End If
End Sub

在“其他代码”的开头,使用appTGGL bTGGL:=False,在其他子程序的末尾更简单地使用appTGGL

操作期间时钟将暂停。听起来On Error Resume Next听到.Find或者其他东西会打破它。只要您的程序完成,时钟将重新启动。如果其他程序没有完成,那么你遇到的问题比一天只有两次的时钟要大。

请记住在其他程序中删除所有多余的代码,例如

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual