调用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所在的工作簿。