Excel VBAで、ユーザーフォームをモードレス表示している間に処理させる お待ちください処理

[excel][vba]

excel2000以上なら ユーザーフォームにvbModeless指定でいける

DoEvents() はOSに溜まった仕事をさせる関数

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

ネタ元