Excelで定期的に実行されるマクロを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/211715

  •  03-07-2019
  •  | 
  •  

質問

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分および毎日の無人レポート機能に使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top