如何定期執行一些VBA代碼,完全自動化?如何製作一個在Excel中定期執行的宏?
7
A
回答
11
您可以使用Application.OnTime調度需要定期執行的宏。例如用下面的代碼創建一個模塊。調用「啓用」啓動定時器運行。第一個這樣做處理Workbook_BeforeClose,並呼籲「禁用」
Option Explicit
Private m_dtNextTime As Date
Private m_dtInterval As Date
Public Sub Enable(Interval As Date)
Disable
m_dtInterval = Interval
StartTimer
End Sub
Private Sub StartTimer()
m_dtNextTime = Now + m_dtInterval
Application.OnTime m_dtNextTime, "MacroName"
End Sub
Public Sub MacroName()
On Error GoTo ErrHandler:
' ... do your stuff here
' Start timer again
StartTimer
Exit Sub
ErrHandler:
' Handle errors, restart timer if desired
End Sub
Public Sub Disable()
On Error Resume Next ' Ignore errors
Dim dtZero As Date
If m_dtNextTime <> dtZero Then
' Stop timer if it is running
Application.OnTime m_dtNextTime, "MacroName", , False
m_dtNextTime = dtZero
End If
m_dtInterval = dtZero
End Sub
或者您可以使用Win32 API的SetTimer/KillTimer函數功能以類似的方式:
它當您關閉工作簿時停止定時器運行是非常重要的。
1
有一種應用方法可用於計時事件。如果你想這個定期發生,你必須在每次執行後重新加載計時器,但這應該是非常簡單的。
Sub MyTimer()
Application.Wait Now + TimeValue("00:00:05")
MsgBox ("5 seconds")
End Sub
- 亞當
0
您可以考慮Windows任務計劃程序和VBScript。
0
我一直這樣做,我曾經使用上面顯示的「OnTime」方法,但它使得您正在運行代碼的機器無法用於其他事情,因爲Excel在100%的時間內運行。相反,我使用修改後的隱藏工作簿,並使用Windows任務計劃程序執行,並在本工作簿中使用workbook_open函數從您的個人工作簿中調用宏,或者打開並運行其中包含代碼的其他工作簿。代碼運行後,您可以從隱藏的工作簿中調用application.quit函數,並關閉下一次運行的ecxel。我在15分鐘和每日無人值守報告功能中使用它。
相關問題
- 1. 如何在Excel宏中執行VBA
- 2. 在Excel工作表中執行宏
- 3. 如何在excel外執行vba宏
- 4. 自動執行一個Excel宏
- 5. 如何在java中定期執行一個動作?
- 6. 如何開發一個執行宏的excel add?
- 7. 如何在另一個宏中反覆執行sas宏?
- 8. 如何正確執行Excel VBA宏?
- 9. 執行宏的Excel文件
- 10. Excel宏在一行
- 11. Excel VBA onkey宏在另一個宏運行時工作
- 12. 如何在Excel中對執行宏的函數執行數據驗證?
- 13. 用於複製特定行的Excel宏
- 14. 用asp執行Excel宏嗎?
- 15. 從Python執行Excel宏
- 16. 如何在另一個Excel工作簿中調用特定於表單的宏?
- 17. Excel宏將一行工作表中的特定行從一個工作表切換到另一個工作表
- 18. 如何在Excel中爲宏指定一個動態範圍
- 19. 如何在excel中創建自動執行宏
- 20. 從一個Excel文件複製到另一個宏的宏
- 21. 在emacs中執行一個特定的宏
- 22. 在excel中的宏中運行宏
- 23. 我可以在n ++中製作一個執行搜索/替換的宏嗎?
- 24. 在新創建的工作簿中複製行的Excel 2003宏
- 25. Excel VBA宏,複製行中的第一個值
- 26. 在asciidoc中,如何爲PDF生成執行一個宏?
- 27. 在Python中執行Visual Basic宏(來自個人宏工作簿)
- 28. Excel:在KeyUp上運行另一個宏
- 29. 在powershell腳本宏執行期間阻止excel打開
- 30. 在Excel表執行使用VBA宏
...要完全自動化這個正確答案,請將 調用MacroName() 到Workbook_Open()事件。 這樣,無論何時您打開xls/xlsm,MacroName都會在沒有任何用戶干預的情況下啓動其特徵。 – jpinto3912 2008-11-12 18:27:02
嗯,我不知道什麼時候分配了m_dtInterval(除了dtZero以外)? – gregseth 2012-02-04 20:52:03