|
▼名無し さん:
▼かるかる さん:
こんばんは。
私も確認してみました(実は、Ontimeを使用すれば、CPUの使用率のほうはOK
かと思っていたので)
まず、かるかるさんが投稿されたコードを調べました。
おっしゃられている通り、100%使用率で進行しています。
ONTimeメソッドを使用して同じ動作になるように作ってみました。
まず、標準モジュール(Module1)にスケジューリング関連のプロシジャー
'===============================================================
Private exetm As Variant '次の実行時刻
Private repcnt As Long '繰り返し回数
Private c_cnt As Long '現在の回数
Private reptm As Variant '実行間隔時間
Private prcnm As String '実行プロシジャー名
'========================================================================
Sub mc_schedule(ByVal on_off As Boolean, Optional ByVal rep_cnt As Long = 0, _
Optional ByVal rep_time As Variant = 0, Optional ByVal proc_name As String = "")
'マクロ実行のスケジュールの設定を行う
'input : on_off --- true スケジュール設定 false---スケジュール解除
' rep_cnt 実行を繰り返す回数
' rep_time 実行間隔時間
' proc_name 実行するプロシジャー名
On Error Resume Next
If on_off = True Then
If rep_cnt > 0 Then
reptm = rep_time
repcnt = rep_cnt
c_cnt = 0
prcnm = proc_name
End If
exetm = Now() + reptm
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)
c_cnt = c_cnt + 1
If c_cnt < repcnt Then
Call mc_schedule(True)
End If
End Sub
'次に別の標準モジュール(Module2)にかるかるさんの投稿されたコードに沿った
'コード
'======================================================================
Dim i As Long
'======================================================================
Sub main()
i = 1
test
'設定
Call mc_schedule(True, 49999, TimeValue("00:00:30"), "test")
' ↑回数 ↑間隔時間 ↑実行するプロシジャー
end sub
'================================================================
Sub test()
'実際にontimeメソッドで実行するプロシジャー
ns = i
Worksheets("Sheet1").Cells(i, 2).Activate
Worksheets("Sheet1").Cells(i, 1).Value = ns
i = i + 1
End Sub
'=================================================================
Sub subproc()
'解除 途中終了のときのため
Call mc_schedule(False)
End Sub
このコードのmainを実行してみて下さい。
これで、調べた結果、10%前後で推移している程度なんです。
時間誤差については、確認してみて下さい。
|
|