我有一个电子表格,我实现了一个计时器,每隔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
行收到错误:
无法运行宏''S:\ OneDrive ...!docs \ timetrack.xlsm'!Tracker.Timer'。宏可能在此工作簿中不可用,或者可能禁用所有宏。
错误中显示的路径是正确的。怎么了?奇怪的是它似乎在StartTimer()
sub中运行它没有问题。
答案 0 :(得分:1)
To refer to a procedure in a worksheet, you need to use the WorkSheet.CodeName
and not the WorkSheet.Name
:
Application.OnTime Now() + TimeValue("00:00:10"), ThisWorkbook.Name & "!" & Me.CodeName & ".Timer"
答案 1 :(得分:0)
在更改其中的单元格之前,您需要激活所需的工作簿。
在访问工作簿中的内容之前,请尝试添加:
Workbooks("timetrack.xlsm").Activate
如果运行的宏位于“timetrack.xlsm”中,您还可以使用以下代码来避免引用工作簿名称:
ThisWorkbook.Activate
ThisWorkbook是指宏所在的工作簿。