Sub Sample1()
Dim TotalSize As Long, buf As String
Worksheets("Sheet3").Activate
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
Worksheets("Sheet1").Activate
End Sub
Sub Sample3()
Dim TotalSize As Long, buf As String
MsgBox "ただいま処理中です..." & vbCrLf & "お待ちください。"
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
End Sub
実行すると次のように「Private Sub UserForm_Activate」が挿入されます。今回使うのはこのプロシージャです。
挿入された「Private Sub UserForm_Activate」に、次のようなコードを書きます。時間のかかる処理を「Private Sub UserForm_Activate」から実行させるのです。
Private Sub UserForm_Activate()
Dim TotalSize As Long, buf As String
Me.Repaint
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
Unload Me
End Sub
Sub Sample5()
Dim TotalSize As Long, buf As String
UserForm1.Show vbModeless
UserForm1.Repaint
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
Unload UserForm1
End Sub
まず、「Private Sub CommandButton1_Click」と「Private Sub UserForm_Activate」の両方で使用できる変数flagを用意します。「Private Sub CommandButton1_Click」でユーザーが中止を選択したら、この変数flagにTrueをセットします。「時間のかかる処理」の中では変数flagをチェックして、もし変数flagがTrueだったら処理を中止します。
Dim flag As Boolean
Private Sub CommandButton1_Click()
If MsgBox("中止しますか?", 292) = vbYes Then flag = True
End Sub
Private Sub UserForm_Activate()
Dim TotalSize As Long, buf As String
Me.Repaint
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
DoEvents
If flag = True Then Exit Do
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
Unload Me
End Sub
Public flag As Boolean
Sub Sample5()
Dim TotalSize As Long, buf As String
UserForm1.Show vbModeless
UserForm1.Repaint
flag = False
''ここから時間のかかる処理
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
DoEvents
If flag = True Then Exit Do
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
buf = Dir()
Loop
Unload UserForm1
End Sub
【UserForm1】
Private Sub CommandButton1_Click()
If MsgBox("中止しますか?", 292) = vbYes Then flag = True
End Sub