2017-02-28 200 views
1

我需要在Excel 2016 VBA編輯器中創建一個計時器,該編輯器每秒鐘都會關閉並顯示一條消息。如何使用Excel 2016 VBA宏編輯器創建自動計時器?

我有一個簡單的代碼,將做到這一點;但是,當我運行代碼時會出現一個消息框,然後出現錯誤。我的代碼是介紹如下:

Private Sub Workbook_Open() 
RunEveryTwoMinutes 
End Sub 

Sub RunEveryTwoMinutes() 
MsgBox ("Stop!") 
Application.OnTime Now + TimeValue("00:00:01"), "RunEveryTwoMinutes" 
End Sub 

我收到狀態錯誤: 「無法運行宏。‘C:用戶|通用\ Book1.xlsm’宏可能無法在此工作簿或提供所有可能的宏被禁用。

我不知道正在發生的事情。我只是需要找到一種方法來創建,一旦代碼初始化啓動一秒的計時器。

回答

1

將此代碼工作簿的代碼模塊中:

Private Sub Workbook_Open() 
RunEveryTwoMinutes 
End Sub 

,並把這個代碼在一個標準的代碼模塊:

Sub RunEveryTwoMinutes() 
MsgBox ("Stop!") 
Application.OnTime Now + TimeValue("00:00:01"), "RunEveryTwoMinutes" 
End Sub 

或者,你可以有你的工作簿的代碼模塊中的所有代碼,但你需要限定宏名稱:

Private Sub Workbook_Open() 
RunEveryTwoMinutes 
End Sub 

Sub RunEveryTwoMinutes() 
MsgBox ("Stop!") 
Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.RunEveryTwoMinutes" 
End Sub 

我相信第一種方法更可取。

+0

不錯的答案,但爲什麼你更喜歡功能是在一個標準的模塊? –

+0

@ASH - IMO如果ThisWorkbook模塊中的函數只是特定於工作簿,並且窗體中的函數只針對表單,並且工作表中的函數只針對工作表以及函數在類中是特定於類的,其他所有內容都被放入通用模塊中。 – YowE3K

+0

這是一個很好的觀點。標準模塊也易於導出,因此可以重複使用。榮譽:) –