実現したいこと
excel VBAで一定間隔ごとにプロセスタスク(プロセディアー?)の関数(表現がおかしいかも)を起動を1秒以下の間隔で起動すること。
前提
発生している問題・エラーメッセージ
下記のコードのTimeSerialでは最小1秒しか設定できないようです。しからばと1秒のシリアル値の0.00001より小さな値を設定しても、
タイマーが働かないようです。よくわかりませんが、mOnTimeの分解能の限界かもわかりません。
タイマー起動を0.1秒くらいにする方法はあるでしょうか。
エラーメッセージ なし
該当のソースコード
VBA
1Option Explicit 2 3Public mOnTime As Date 4 5Sub TimerProc() 6 Range("A1") = Format(Time, "yy/mm/dd hh:mm:ss") 7 Range("A1").NumberFormatLocal = "yymmdd hhmmss" 8End Sub 9 10Sub OnTimeStart() 11 Dim serial 12 Call TimerProc 'タイマ起動されたときの処理(短時間の処理) 13 serial = 0.00001/10 '約100ms 14 Range("a2") = serial 15 mOnTime = Time() + serial 16' mOnTime = Time() + TimeSerial(0, 0, 1) '最小1秒 17 Call Application.OnTime(mOnTime, "OnTimeStart") 18End Sub 19 20Sub OnTimeStop() 21 '同一のProcedureとEarliestTimeがないとエラーになる 22 On Error Resume Next 23 Call Application.OnTime(mOnTime, "OnTimeStart", , False) 24End Subソースコード
試したこと
特になし
補足情報(FW/ツールのバージョンなど)
EXCEL2021,32ビット版
winAPIのSetTimerやapplication.waitを使ってみるのはいかがでしょうか。ミリ秒単位で設定できたはずです
ご返事ありがとうございます。
タイマーはいろんな方法があるのですね。
その後、調べたところ、タイマー機能を使わずとも、セルが更新あるいは再計算の度毎に発生する、イベントハンドラーを起動する方法がわかりやすいので、その方向で進めています。この質問外のやりたいことについて、説明しなかったことはお詫びします。VBAでこの種の処理が経験がなく、適切に質問できなかったことお詫びします。
一応、セル更新の度に実行するWorksheet.Changeイベントを使用する場合条件が条件なので意図しないタイミングで発火したり無限ループに陥ったりすることが割と起こるので気持ち注意しておいた方がいいと思います
回答1件
あなたの回答
tips
プレビュー