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