调用Application.OnTime完全合格的path子?

我有一个电子表格,我实现了一个计时器,每10秒自动更新一个公式。 一切都很好,直到我打开另一个电子表格。 我的假设是,它仍然试图在错误的工作表上运行Timer() 。 所以,我试图切换到绝对的电话。 这是我的完整代码:

 Dim TimerActive As Boolean Sub StartTimer() Start_Timer End Sub Private Sub Start_Timer() TimerActive = True Application.OnTime Now() + TimeValue("00:00:10"), "timetrack.xlsm!Tracker.Timer" End Sub Sub Stop_Timer() TimerActive = False End Sub Sub Timer() Dim tracker As Worksheet Set tracker = Workbooks("timetrack.xlsm").Sheets("Tracker") tracker.Range("O1").Value = "Timer Stopped" 'On Error Resume Next If TimerActive Then tracker.Range("O2").Value = Time Application.OnTime Now() + TimeValue("00:00:10"), "timetrack.xlsm!Tracker.Timer" tracker.Range("N:N").Calculate End If tracker.Range("O1").Value = "" End Sub 

具体来说,我在Application.OnTime行收到错误:

无法运行macros''S:\ OneDrive …!docs \ timetrack.xlsm'!Tracker.Timer'。 macros可能不在此工作簿中可用或所有macros可能被禁用。

出现在错误中的path是正确的。 哪里不对? 奇怪的是似乎在StartTimer()子中运行它没有问题。

要引用工作表中的过程,您需要使用WorkSheet.CodeName而不是WorkSheet.Name

 Application.OnTime Now() + TimeValue("00:00:10"), ThisWorkbook.Name & "!" & Me.CodeName & ".Timer" 

在对单元格进行更改之前,您需要激活所需的工作簿。

在访问工作簿中的内容之前,请尝试添加:

 Workbooks("timetrack.xlsm").Activate 

如果运行的macros位于“timetrack.xlsm”中,则还可以使用以下代码来避免引用工作簿名称:

 ThisWorkbook.Activate 

ThisWorkbook引用该macros所在的工作簿。