使用完全限定的sub路径调用Application.OnTime?

时间:2016-04-21 20:47:50

标签: excel vba excel-vba timer

我有一个电子表格,我实现了一个计时器,每隔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中运行它没有问题。

2 个答案:

答案 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是指宏所在的工作簿。