|    | 
     ▼名無し さん: 
▼かるかる さん: 
こんばんは。 
私も確認してみました(実は、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%前後で推移している程度なんです。 
 
時間誤差については、確認してみて下さい。 
 
 | 
     
    
   |