質問: True 処理1 Sheets("記入").Select Unload Me End Sub ```
回答: ユーザーフォームをモードレス(`vbModeless`)で開くと、 コードを中断せずにすぐ次のコードへ進みます。 Forループの最後まで一気に進んでしまいます。 ``` Do Uutil fStop Doevents Loop ``` というようにDoループで待機させる方法もありますが、 ずっとコードが回り続けることになりますので、CPU負荷が大きくなり お勧めできません。 ここは、ループは使わずに、 一つの処理が終わったら(ユーザーがOKを押したら) 次の処理へすすむというようなコーディングにするといいでしょう。 標準モジュール ``` Option Explicit Public EndRow As Long '最終行 Public CurRow As Long '処理中の行 Sub 処理開始() EndRow = Sheets("設定").Cells(Rows.Count, 1).End(xlUp).Row CurRow = 2 Call ユーザーフォーム End Sub Sub ユーザーフォーム() UserForm1.Label1.Caption = "【" & Sheets("設定").Cells(CurRow, 1).Text & "】の" _ & vbCrLf & "コードを入力して下さい。" UserForm1.Show vbModeless Sheets("記入").Select End Sub Sub 処理実行() CurRow = CurRow + 1 If CurRow > EndRow Then MsgBox "全処理が完了しました。" Unload UserForm1 Else UserForm1.Hide 処理1 Call ユーザーフォーム End If End Sub ``` ユーザーフォーム ``` Private Sub CommandButton1_Click() Call 処理実行 End Sub ``` `処理開始` を実行すると、 ユーザーフォームが開きユーザーに入力を即します。 入力後、ユーザーがOKを押すと、 次の入力を即すユーザーフォームが開きます。