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
投稿者 るきお  (社会人) 投稿日時 2022/10/8 10:31:13
Excelマクロは詳しくないのですが、Excel  VBAは同時に複数の処理ができないのではないでしょうか。
時間のかかる処理の実行中に、セルの編集など別のことをやることはできなくて、Excel本体が強制的にVBAの処理を止めてしまうのかなと思いました。

検索すると同じような悩みの人の質問がヒットしました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13166691883

この方は質問の内容が理解されずに不遇だったようです…(この方は具体的なサンプルで説明していないところが湯さんと違いますね)

「Excel VBA シングルスレッド」などで検索するといろいろ試している人の情報が出るので、回避したいのであればこのあたりを掘り下げることになるのかなと想像しました。でも、たぶん、結構大変で、あまりやらない方が良い類のことですはないかと思います。

以上は、特に裏どりせずに私が思ったことを書きました。
湯さんのサンプルを実行して私の環境でも同じことが発生するのは確認しています。
投稿者   (社会人) 投稿日時 2022/10/11 14:15:23
るきおさん

ありがとうございます。
シングルスレッドで検索しましたが中々難しく...

開始時と終了時に時刻を取得して、引き算する事で時間を測る方法を思いついたのでそちらを試してみます。

ありがとうございました。