当VBA项目中的其他模块运行时,excel工作簿中的时钟停止运行
我的excel工作簿上有一个运行的时钟,每当我运行工作簿中的其他代码时,时钟就会停止。每当这种情况发生时,我总是要把时钟向后拨。有没有办法让时钟自动运行,而不是我必须意识到它并单击它?在可选的LatestTime参数留空时,与其尝试使用默认的无限等待,为什么不合并一些可能在“其他代码”中使用的应用程序事件当VBA项目中的其他模块运行时,excel工作簿中的时钟停止运行,excel,vba,Excel,Vba,我的excel工作簿上有一个运行的时钟,每当我运行工作簿中的其他代码时,时钟就会停止。每当这种情况发生时,我总是要把时钟向后拨。有没有办法让时钟自动运行,而不是我必须意识到它并单击它?在可选的LatestTime参数留空时,与其尝试使用默认的无限等待,为什么不合并一些可能在“其他代码”中使用的应用程序事件 Public Sub appTGGL(Optional bTGGL As Boolean = True) Application.ScreenUpdating = bTGGL
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
时钟将在运行期间停止。听起来像是“下一步继续执行错误时的”
,以克服。查找,或者有什么东西会破坏它。只要程序完成,时钟就会重新启动。如果其他的程序没有完成,你会遇到比一天只对两次的时钟更大的问题
记住在你的其他过程中去掉所有多余的代码,比如
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
也许这会有帮助:
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
是否将clockOn
设置为False
代码中的任何其他位置(其他正在运行的子程序)?因此您可以通过调用stopclock()来停止时钟?如果是这种情况,为什么clockOn
是全局的?@paulbica-因为在下一次迭代中runClock
不会安排另一次发生,从而停止连续循环。@Niva-您的“其他代码”是否在下一次错误恢复时使用?这将停止应用程序。OnTime的无限期等待。@Jeeped:clockOn
不需要对该逻辑的所有模块可见;它可以是模块的私有成员(仅限模块级别的全局成员)。是否需要在stopClock
中调用运行时钟
?好的,我会尝试!不,我不需要叫它。谢谢对不起,这部分代码是什么意思?functionWithParam=“'runClock'&Chr(34)&flag&Chr(34)&””如果clockStart然后是Application.OnTime Now+TimeSerial(0,0,1),functionWithParamI删除了@Niva测试的stopClock()
中的调用runClock
。functionWithParam
是一种使用OnTime
中的参数执行函数的方法,谢谢,我也会尝试一下:-)