| 
    
     |  | Kein さん、タイマー30 さん、こんばんは。 ちょっとKein さんのコードより、長いけど以下のコードを
 試してみて下さい。
 
 標準モジュール(Module1)に
 '=============================================================
 Sub main()
 '設定
 Call mc_schedule(True, TimeValue("17:00:00"), TimeValue("00:00:05"), "test")
 End Sub
 '==============================================================
 Sub test()
 '実際に実行するプロシジャー
 [a1].Value = [a1].Value + 1
 End Sub
 '==============================================================
 Sub subproc()
 '解除
 Call mc_schedule(False)
 End Sub
 
 
 別の標準モジュール(Module2)に
 '==================================================================
 Private exetm As Variant '次の実行時刻
 Private lmtm As Variant '最終時刻
 Private reptm As Variant '実行間隔時間
 Private prcnm As String '実行プロシジャー名
 Sub mc_schedule(ByVal on_off As Boolean, Optional ByVal limit_time As Variant, _
 Optional ByVal rep_time As Variant, Optional ByVal proc_name As String)
 'マクロ実行のスケジュールの設定を行う
 'input : on_off --- true スケジュール設定 false---スケジュール解除
 '    limit_time 実行を繰り返す最終時刻
 '    rep_time  実行間隔時間
 '    proc_name 実行するプロシジャー名
 On Error Resume Next
 If on_off = True Then
 reptm = rep_time
 lmtm = limit_time
 exetm = Now + reptm
 prcnm = proc_name
 End If
 Application.OnTime EarliestTime:=exetm, Procedure:="mc_exec", Schedule:=on_off
 On Error GoTo 0
 End Sub
 '=================================================================
 Sub mc_exec()
 'スケジュール設定されたプロシジャーを実行する
 Dim wk As Variant
 wk = Application.Run(prcnm)
 If Time() + reptime < lmtm Then
 Call mc_schedule(True, lmtm, reptm, prcnm)
 End If
 End Sub
 
 
 プロシジャーmainの実行で10秒おきに「test」を実行します。
 
 途中解除はする場合は、「subproc」を実行して下さい。
 
 私の環境でテストした限りでは、うまく動いてくれました。
 確認して下さい。
 
 |  |