VBAタイマーで他セル入力するとタイマーが止まってしまう
投稿者 るきお  (社会人)
投稿日時
2022/10/8 10:31:13
Excelマクロは詳しくないのですが、Excel VBAは同時に複数の処理ができないのではないでしょうか。
時間のかかる処理の実行中に、セルの編集など別のことをやることはできなくて、Excel本体が強制的にVBAの処理を止めてしまうのかなと思いました。
検索すると同じような悩みの人の質問がヒットしました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13166691883
この方は質問の内容が理解されずに不遇だったようです…(この方は具体的なサンプルで説明していないところが湯さんと違いますね)
「Excel VBA シングルスレッド」などで検索するといろいろ試している人の情報が出るので、回避したいのであればこのあたりを掘り下げることになるのかなと想像しました。でも、たぶん、結構大変で、あまりやらない方が良い類のことですはないかと思います。
以上は、特に裏どりせずに私が思ったことを書きました。
湯さんのサンプルを実行して私の環境でも同じことが発生するのは確認しています。
時間のかかる処理の実行中に、セルの編集など別のことをやることはできなくて、Excel本体が強制的にVBAの処理を止めてしまうのかなと思いました。
検索すると同じような悩みの人の質問がヒットしました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13166691883
この方は質問の内容が理解されずに不遇だったようです…(この方は具体的なサンプルで説明していないところが湯さんと違いますね)
「Excel VBA シングルスレッド」などで検索するといろいろ試している人の情報が出るので、回避したいのであればこのあたりを掘り下げることになるのかなと想像しました。でも、たぶん、結構大変で、あまりやらない方が良い類のことですはないかと思います。
以上は、特に裏どりせずに私が思ったことを書きました。
湯さんのサンプルを実行して私の環境でも同じことが発生するのは確認しています。
投稿者 湯  (社会人)
投稿日時
2022/10/11 14:15:23
るきおさん
ありがとうございます。
シングルスレッドで検索しましたが中々難しく...
開始時と終了時に時刻を取得して、引き算する事で時間を測る方法を思いついたのでそちらを試してみます。
ありがとうございました。
ありがとうございます。
シングルスレッドで検索しましたが中々難しく...
開始時と終了時に時刻を取得して、引き算する事で時間を測る方法を思いついたのでそちらを試してみます。
ありがとうございました。
VBAを用いて、あるエクセルシートにストップウォッチ機能を付けたいと思っています。
下記コードのようにストップウォッチスタートボタンを作成したのですが、スタート後にエクセル内の他セルの編集をするとタイマーが止まってしまいます。
ストップボタンを押すまでストップウォッチのカウントを止めない方法はありますでしょうか?
Dim StartTime, FinishTime, TotalTime, PauseTime
StopIt = False
ResetIt = False
If Range("A1") = 0 Then
StartTime = Timer
PauseTime = 0
LastTime = 0
Else
StartTime = 0
PauseTime = Timer
End If
StartIt:
DoEvents
If StopIt = True Then
LastTime = TotalTime
Exit Sub
Else
FinishTime = Timer
TotalTime = FinishTime - StartTime + LastTime - PauseTime
TTime = TotalTime * 100
HM = TTime Mod 100
TTime = TTime \ 100
hh = TTime \ 3600
TTime = TTime Mod 3600
MM = TTime \ 60
SS = TTime Mod 60
Range("A1").Value = Format(hh, "00") & ":" & Format(MM, "00") & ":" & Format(SS, "00") & "." & Format(HM, "00")
If ResetIt = True Then
Range("A1") = Format(0, "00") & ":" & Format(0, "00") & ":" & Format(0, "00") & "." & Format(0, "00")
LastTime = 0
PauseTime = 0
End
End If
GoTo StartIt
End If