Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


62705 / 76732 ←次へ | 前へ→

【18632】Re:動作が重すぎて
発言  ichinose  - 04/10/2(土) 2:35 -

引用なし
パスワード
   ▼名無し さん:
▼かるかる さん:
こんばんは。
私も確認してみました(実は、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%前後で推移している程度なんです。

時間誤差については、確認してみて下さい。

1 hits

【18619】動作が重すぎて かるかる 04/10/1(金) 16:28 質問
【18621】Re:動作が重すぎて ichinose 04/10/1(金) 18:20 発言
【18622】Re:動作が重すぎて かるかる 04/10/1(金) 18:40 発言
【18626】Re:動作が重すぎて 名無し 04/10/2(土) 0:52 発言
【18632】Re:動作が重すぎて ichinose 04/10/2(土) 2:35 発言
【18634】Re:動作が重すぎて 名無し 04/10/2(土) 12:15 発言
【18646】Re:動作が重すぎて bykin 04/10/3(日) 0:22 回答

62705 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free