タイマー機能を使っているんですが、
このように
Private Sub cmd_Click()
If Timer1.Enabled = True Then
Timer1.Enabled = False
End If
・
・
・
End Sub
コマンドボタンをクリックして、タイマー内の処理を中断しているんですが、
タイマー内のプログラムを最後まで終わらせてからコマンドボタン内の処理を
するにはどうしたらいいのでしょうか?
Private Sub Command1_Click()
処理C
End Sub
Private Sub Timer1_Timer()
処理A
DoEvents
処理B
End Sub
こういうことですか?
例えば、処理Aを実行中にボタンを押した場合に
・処理A -> 処理C -> 処理B
の順番で処理がされているものを
・処理A -> 処理B -> 処理C
の順番で処理を行いたいと?
ぽちさんレスありがとうございます。
そのとうりです。書き方がへたくそですみません。
# 私的には、タイマーコントロールを良く使いますが、
# このような事で困ったことはありません。
Label1, Timer1, Command1 をフォーム上に配置し、
下のコードを貼り付けて実行してみて下さい。
ラベルのキャプションが変更されはじめたら(処理Aが動き始めたら)、
ボタンを押してみて下さい。
下のコードの場合、デバッグウィンドウに
処理A
処理C
処理B
と表示されると思います。
ABCの順にする一番簡単な方法は、
Timer イベント内に DoEvents を記述しないことです。
どうしても、 DoEvents を入れなければならない場合、
フラグを使用するなど、結構面倒くさくなってしまうと思います。
Option Explicit
Private Sub Command1_Click()
Debug.Print "処理C"
End Sub
Private Sub Form_Load()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim i As Integer
Debug.Print "処理A"
For i = 0 To 8000
Label1.Caption = "処理A " & i
Label1.Refresh
Next i
DoEvents
Debug.Print "処理B"
For i = 0 To 8000
Label1.Caption = "処理B " & i
Label1.Refresh
Next i
Timer1.Enabled = False
End Sub