Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当VBA项目中的其他模块运行时,excel工作簿中的时钟停止运行_Excel_Vba - Fatal编程技术网

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

当VBA项目中的其他模块运行时,excel工作簿中的时钟停止运行,excel,vba,Excel,Vba,我的excel工作簿上有一个运行的时钟,每当我运行工作簿中的其他代码时,时钟就会停止。每当这种情况发生时,我总是要把时钟向后拨。有没有办法让时钟自动运行,而不是我必须意识到它并单击它?在可选的LatestTime参数留空时,与其尝试使用默认的无限等待,为什么不合并一些可能在“其他代码”中使用的应用程序事件 Public Sub appTGGL(Optional bTGGL As Boolean = True) Application.ScreenUpdating = bTGGL

我的excel工作簿上有一个运行的时钟,每当我运行工作簿中的其他代码时,时钟就会停止。每当这种情况发生时,我总是要把时钟向后拨。有没有办法让时钟自动运行,而不是我必须意识到它并单击它?

在可选的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

时钟将在运行期间停止。听起来像是“下一步继续执行错误时的
,以克服
。查找
,或者有什么东西会破坏它。只要程序完成,时钟就会重新启动。如果其他的程序没有完成,你会遇到比一天只对两次的时钟更大的问题

记住在你的其他过程中去掉所有多余的代码,比如

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
中的参数执行函数的方法,谢谢,我也会尝试一下:-)