回答編集履歴

2 誤字修正

ttyp03

ttyp03 score 16714

2018/06/01 10:13  投稿

VBAの性質上、複数のイベントを同時に発生させることは不可能と思われます。
なのでドラッグ中の画面更新はあきらめるとして、カウントだけは正しく行われるような方向にするべきかと思います。
方法としては、ボタンクリックに開始時の時間を保持しておいて、1秒ごとのイベントでは現在時間と開始時間の差分で秒数を算出します。
方法としては、ボタンクリックに開始時の時間を保持しておいて、1秒ごとのイベントでは現在時間と開始時間の差分で秒数を算出します。
以下サンプルです。
```VBA
' フォーム
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
```
1 余計な行削除

ttyp03

ttyp03 score 16714

2018/06/01 09:44  投稿

VBAの性質上、複数のイベントを同時に発生させることは不可能と思われます。
なのでドラッグ中の画面更新はあきらめるとして、カウントだけは正しく行われるような方向にするべきかと思います。
方法としては、ボタンクリックに開始時の時間を保持しておいて、1秒ごとのイベントでは現在時間との開始時間の差分で秒数を算出します。
以下サンプルです。
```VBA
' フォーム
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)   ' 経過秒数を計算
       Debug.Print togSt, Now  
       Worksheets("工程表").Range("A11") = cnt
       frmStopTIme.Label1.Caption = cnt
       Application.OnTime Now() + TimeValue("00:00:01"), "macro1"
   End If
End Sub
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る