|
こんばんわ。
>マクロ実行するのは、どの「sub」から実行するのでしょうか。
ややこしいのでもう一度説明します。
1.標準モジュールを用意して、下記コード(2つのプロシージャ)をコピペします。
Sub 長い処理() の中には実際の処理を記入してください。
Sub test()
Dim OrgState As Integer
OrgState = Application.WindowState
Application.WindowState = xlMinimized
Load UserForm1
UserForm1.Show
MsgBox "処理終了"
Application.WindowState = OrgState
Unload UserForm1
Set UserForm1 = Nothing
End Sub
Sub 長い処理()
'*********ここからは実際の処理を記入(下のコードはダミーです)
Dim i As Long
Dim j As Long
For i = 1 To 10000
j = j * 1
DoEvents
Next
'*********ここまで
End Sub
2.ユーザーフォーム(UserForm1)を挿入して、モジュールに下記コードをコピペします。
フォームにはラベル等で「処理中」と書いておけばええと思います。
Private Sub UserForm_Activate()
長い処理
Me.Hide
End Sub
3.test() プロシージャを実行します。
実行するとフォームが表示され、それと同時にフォームの Activate イベントによって
Sub 長い処理() が実行されます。
4.長い処理() が終了すると Me.Hide でフォームは Me.Hide で非表示となり、
元の test() プロシージャに制御が戻り、「処理終了」のメッセージが表示されます。
・・・これでわかりまっか?
<おまけ>
長い処理そのものをフォームモジュールの中に書いてもかまいまへん。
その場合は標準モジュールの Sub 長い処理() は削除して、その代わりにフォームモジュールの
コードを下記のように変更してください。(最後の Me.Hide を忘れないこと)
処理が短いのならこっちのほうがいいかも・・・
Private Sub UserForm_Activate()
'*********ここからは実際の処理を記入(下のコードはダミーです)
Dim i As Long
Dim j As Long
For i = 1 To 10000
j = j * 1
DoEvents
Next
'*********ここまで
Me.Hide
End Sub
試してみてな。
ほな。
|
|