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/7 17:34:39
度々お世話になっております。
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
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
ありがとうございます。
シングルスレッドで検索しましたが中々難しく...
開始時と終了時に時刻を取得して、引き算する事で時間を測る方法を思いついたのでそちらを試してみます。
ありがとうございました。