要件
- 無限ループの中で処理を実行する
- STARTボタンを押下すると、無限ループが開始される
- FINISHボタンを押下すると、無限ループが停止される
このような要件を満たすVBAプログラムの一例です。
サンプルコード(問題点あり)
まず、典型的な実装例を示します。
Dim status As String
' STARTボタンに登録する
Sub Start()
status = "START"
Do While status = "START"
' <<< ここに処理を実装する >>>
Loop
End Sub
' FINISHボタンに登録する
Sub Finish()
status = "FINISH"
End Sub
問題点
上記のコードを実際に実装してSTARTボタンを押すと、Excelが入力を受け付けなくなり、FINISHボタンも押せなくなります。
理由: VBAのループ中は、Excelのユーザーインターフェースがロックされるため、他の操作ができなくなります。
解決策
無限ループの中で DoEvents 関数を呼び出すことで、Excelに他のイベント(ボタン押下など)を処理させることができます。
修正版サンプルコード
Dim status As String
' STARTボタンに登録する
Sub Start()
status = "START"
Do While status = "START"
' <<< ここに処理を実装する >>>
DoEvents
Loop
End Sub
' FINISHボタンに登録する
Sub Finish()
status = "FINISH"
End Sub
DoEvents をループ内で呼び出すことで、他のボタン操作やイベント処理が可能となり、無限ループを安全に制御できます。
動作環境
- Microsoft Visual Basic for Applications 7.1