質問: Worksheets("工程表").Range("A11") Application.OnTime Now() + TimeValue("00:00:01"), "macro1" End If End Sub ``` ### 試したこと フォームのモーダル表示 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: VBAの性質上、複数のイベントを同時に発生させることは不可能と思われます。 なのでドラッグ中の画面更新はあきらめるとして、カウントだけは正しく行われるような方向にするべきかと思います。 方法としては、ボタンクリックに開始時の時間を保持しておいて、1秒ごとのイベントでは現在時間と開始時間の差分で秒数を算出します。 以下サンプルです。 ``` ' フォーム Private Sub tog1_Click() If tog1.Value = True Then Dim waitTime As Variant togSt = Now ' 開始時間を保持 waitTime = togSt + TimeValue("0:00:01") Application.Wait waitTime Call macro1 End If End Sub ' 標準モジュール Public togSt Sub macro1() If frmStopTIme.tog1.Value = True Then '1秒後にmacro100810aを実行 Dim cnt cnt = DateDiff("s", togSt, Now) ' 経過秒数を計算 Worksheets("工程表").Range("A11") = cnt frmStopTIme.Label1.Caption = cnt Application.OnTime Now() + TimeValue("00:00:01"), "macro1" End If End Sub ```