|
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」を実行して下さい。
私の環境でテストした限りでは、うまく動いてくれました。
確認して下さい。
|
|