2014年5月31日土曜日

Excel VBA DoEvents で Do While Loop を抜ける

【プリント開始は】
Click -> Flag = True -> myPrint -> ループし続ける

【プリント停止は】
Click -> Flag = False -> End Sub -> DoeVents -> Loop -> While (False) -> ループ停止 ->End Sub
と処理される。ここでDoEventsがPrintの前にあれば False  を表示して停止し、後にあれば Trueのまま停止する。・・・どこまで処理してループを抜けるか。

【DoEvents が無いと】
無限ループとなってCtrl+ALT+Delete のお世話になる。

【ボタンを二つに】
ボタンを「開始」「停止」の二つにすれば、分かりやすくて柔軟性もあると思われる。ボタンの Visible を交互に切り替えて、見かけ一つに見えるように重ねてレイアウトする方法もある。 
----------------------------------------------------
Public Flag As Boolean

Private Sub CommandButton1_Click()
    If Flag = True Then
        Flag = False
    Else
        Flag = True
        Call myPrint         'クリックでプリント開始
    End If
End Sub

Public Sub myPrint()
    Dim Count As Integer
    Do While (Flag)
        DoEvents
        Count = Count + 1
        Debug.Print Count, Flag '再度押されるまでプリントし続ける
'       DoEvents
    Loop
End Sub
----------------------------------------------------