Application.ontime失败,当另一个工作簿在"安全模式下打开"

时间:2017-09-04 16:33:36

标签: vba excel-vba excel

我在这里撕开我的头发......

我有一个Excel工作表,用于注册用于不同任务的时间。在工作表中,我开始了#34;时钟"只要我处理任务,就会以10秒的增量运行。 只要没有其他工作簿打开,这是正常的,即处于安全模式(即从Weblocation打开,"启用编辑"未激活)。 如果是这种情况,计时器将失败...

"Run-time error '1004':
Method 'OnTime' of object '_Application' failed.

和...

  • 如果安全模式中的工作簿是"最后一个有焦点的工作簿",在转到计算机上的另一个窗口之前,宏将失败。
  • 如果包含宏的工作簿是最后一个具有焦点的Excel窗口,则在转到计算机上的另一个窗口之前,即使在" safemode"中打开了另一个工作簿,宏也不会失败。
  • 如果另一个工作簿是"最后一个excel有焦点",但是在"已启用编辑"模式,宏不会失败。

我的代码:

Dim TimerActive As Boolean

Sub Start_Timer()
    TimerActive = True
    Timer
End Sub

Sub Stop_Timer()
    TimerActive = False
End Sub

Sub Timer()
    If TimerActive Then
        ThisWorkbook.Sheets("Register_time").Range("InputTimeTo").Value = Time
        ThisWorkbook.Application.OnTime Now() + TimeValue("00:00:10"), "Timer"
    End If
End Sub

当宏失败时,调试器会突出显示以下行:

ThisWorkbook.Application.OnTime Now() + TimeValue("00:00:10"), "Timer"

我想以某种方式解决这个问题,以便宏可以在后台运行"即使另一个工作簿具有焦点(安全模式与否),或者完全不同的程序具有焦点。 注意:当时钟需要更新时,我无法获得具有宏增益焦点的工作簿,因为这意味着我将离开我正在工作的程序。 但是,如果没有更新时钟,那就没问题,直到我选择将焦点设置回显示时钟的工作表。

任何?

1 个答案:

答案 0 :(得分:0)

尝试在“Ontime”行前输入此代码:

On Error Resume Next
ThisWorkbook.Application.OnTime Now()+ TimeValue(“00:00:10”),“Timer”

这可以避免意外行为。

最佳,