2016-12-18 101 views
0

所以我已經建立了這個計時器宏,超過一個youtube人已經指定如何以完全相同的方式建立,但它仍然拒絕上班。excel計時器宏不起作用,「宏找不到或宏未啓用」

Sub StartTimer() 
    Application.OnTime Now + TimeValue("00:00:01"), "nextTime" 
End Sub 

Sub nextTime() 
    If Sheet1.Range("I1") = 0 Then Exit Sub 
    End If 
    Range("I1").Value = Range("I1").Value - TimeValue("00:00:01") 
    StartTimer 
End Sub 

Sub StopTimer() 
    Application.OnTime Now + TimeValue("00:00:01"), "nextTime", , False 
End Sub 

問題出現在StartTimer子例程中的代碼行中。 nextTime方法根本無法識別,因爲Error說: 該宏可能在此工作簿中不可用,或者所有宏可能被禁用。這顯然不是這樣,因爲我所有的其他宏都可以工作,子程序就在那裏。你有什麼建議?

+0

你如何嘗試運行宏? – Andreas

+0

這可能是名稱衝突。除了sub也被命名爲'nextTime'嗎?例如,如果一個模塊也被命名爲'nextTime',則會發生錯誤。 –

+0

[使用VBA(excel)在Excel 2010中創建倒數計時器的可能的重複](http://stackoverflow.com/questions/37173026/create-a-countdown-timer-in-excel-2010-using-vba-excel )(我希望在**之前我已經注意到了**) – YowE3K

回答

1

將代碼移出工作表代碼模塊並將其放入正常的代碼模塊。

或者,您也可以通過完全限定它爲Sheet1.nextTime(其中Sheet1必須在代碼所在的工作表代號)調用它,但我認爲它可能是更好的把它放到項目級代碼模塊。

您還需要從nextTime子例程中刪除End If

而且您需要修復StopTimer例程以傳遞正確的時間 - 即下一個事件由於運行的時間。

Public nextRunTime As Date 
Sub StartTimer() 
    nextRunTime = Now + TimeValue("00:00:01") 
    Application.OnTime nextRunTime, "nextTime" 
End Sub 

Sub nextTime() 
    If Sheet1.Range("I1") = 0 Then Exit Sub 
    Range("I1").Value = Range("I1").Value - TimeValue("00:00:01") 
    StartTimer 
End Sub 

Sub StopTimer() 
    Application.OnTime nextRunTime, "nextTime", , False 
End Sub 
+0

sheet1.nexTime事情工作完美。感謝您的時間。我對vba很陌生,所以我也會嘗試你的建議。 – MTB