VBAの学習で、DoEventsを使ったシステムを作成したので今回記事にします。
まずは、シート上を以下のように準備します。
そして以下のソースコードを記述し、実行していきます。
Public StopFrag As Boolean '一時停止フラグ
Dim inner As String 'セルに入力する"123"格納用変数
Dim i As Integer '行位置カウント用変数
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) 'API使用のため宣言
'セルに"123"を記入していく。チェックボックスの状態により一時停止と再開を行う。
Sub スタート()
i = 1
inner = "123"
Do While i < 21 '20行まで
DoEvents '処理中でもチェックボックスが有効になる。
StopFrag = ActiveSheet.CheckBox1.Value 'チェックボックスの状態を(True or False)で取得する。
Do While StopFrag = True 'チェック有 チェックボックスのステータスを確認して中断、再開
Sleep 500 'インターバル0.5秒
DoEvents '処理中でもチェックボックスが有効になる。
StopFrag = ActiveSheet.CheckBox1.Value 'チェックボックスの状態を(True or False)で取得する。
Loop
Cells(i, 1).Value = inner '"123"をセル(1,1)から順に入力していく。
i = i + 1 '次の行
Sleep 500 'インターバル0.5秒
Loop
End Sub
実行するとA列に「123」が0.5秒おきに自動入力されていきます。
通常マクロ実行中はシート上の操作をしようとしても、画面描画されず、操作を受け付けませが、「DoEvents」を付けることにより、マクロ実行中でもシート上の操作を受け付けるようになります。
「stop」にチェックが無いと「StopFrag」がFalseとなる。
「stop」にチェックが入ると「StopFrag」がTrueとなる。
「stop」にチェックが入ると自動入力が一時停止となります。(見かけ的に止まっているように見えるだけで、裏では何もしないという処理が0.5秒ごとに繰り返されている)
そしてチェックが外れると自動入力が再開されます。