Excelで定期的に実行されるマクロを作成するにはどうすればよいですか?
質問
VBAコードを完全に自動化して定期的に実行する方法
解決
Application.OnTimeを使用して、マクロが定期的に実行されるようにスケジュールできます。たとえば、次のコードでモジュールを作成します。 「有効にする」を呼び出すタイマーの実行を開始します。
ワークブックを閉じるときにタイマーの実行を停止することが重要です。これを行うには、Workbook_BeforeCloseを処理して" Disable"を呼び出します
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関数を同様の方法で使用できます。
他のヒント
タイミングイベントに使用できるアプリケーションメソッドがあります。これを定期的に実行するには、各実行後にタイマーを「リロード」する必要がありますが、それは非常に簡単です。
Sub MyTimer()
Application.Wait Now + TimeValue("00:00:05")
MsgBox ("5 seconds")
End Sub
-アダム
WindowsタスクスケジューラとVBScriptを検討できます。
これは常に行います。以前は「OnTime」を使用していました。上記の方法を使用しますが、Excelが100%実行されているため、コードを実行しているマシンが他の用途に使用できなくなります。代わりに、変更された非表示のワークブックを使用し、Windowsタスクスケジューラで実行し、thisworkbook workbook_open関数で個人用ワークブックからマクロを呼び出すか、コードを含む別のワークブックを開いて実行します。コードの実行後、非表示のブックからapplication.quit関数を呼び出して、次の実行のためにecxelを閉じることができます。私はこれをすべての15分および毎日の無人レポート機能に使用します。
所属していません StackOverflow