'ダイアログボックスのネストのサンプルマクロ '新規ブックにモジュールシートを挿入し、以下のマクロをコピーします。 'MakeDialogSheetマクロを実行してダイアログシートを作成した後、 'DialogNestSampleマクロを実行してください。 Option Explicit Dim dialogNo As Integer Dim procName As String Sub DialogNestSample() dialogNo = 1 procName = "" Do While dialogNo > 0 If ThisWorkbook.DialogSheets(dialogNo).Show Then Select Case procName Case "Proc1" Proc1 Case "Proc2" Proc2 Case "Proc3" Proc3 Case Else End Select procName = "" Else Exit Do End If Loop End Sub Sub NextDialog() dialogNo = dialogNo + 1 End Sub Sub PrevDialog() dialogNo = dialogNo - 1 End Sub Sub Finish() dialogNo = 0 procName = "Proc3" End Sub Sub Exec_Proc1() procName = "Proc1" End Sub Sub Exec_Proc2() procName = "Proc2" End Sub Sub Proc1() MsgBox "Proc1" End Sub Sub Proc2() MsgBox "Proc2" End Sub Sub Proc3() MsgBox "完了しました。" End Sub 'サンプルダイアログシートを作成するマクロ Sub MakeDialogSheet() Dim i As Integer Dim gw As Double For i = 1 To 3 With ActiveSheet DialogSheets.Add.Move after:=Sheets(.Name) End With gw = ActiveSheet.Buttons(1).Height / 3 With ActiveSheet.DialogFrame .Left = gw * 13 .Top = gw * 4 .Width = gw * 50 .Height = gw * 28 .Caption = "Dialog" & i End With ActiveSheet.DrawingObjects.Delete If i <= 2 Then With ActiveSheet.Buttons.Add(Left:=gw * 29, Top:=gw * 14, _ Width:=gw * 18, Height:=gw * 4) .Caption = "Proc" & i .DismissButton = True .OnAction = "Exec_Proc" & i End With End If If i >= 2 Then With ActiveSheet.Buttons.Add(Left:=gw * 37, Top:=gw * 26, _ Width:=gw * 11, Height:=gw * 4) .Caption = "< 戻る" .DismissButton = True .OnAction = "PrevDialog" End With End If With ActiveSheet.Buttons.Add(Left:=gw * 50, Top:=gw * 26, _ Width:=gw * 11, Height:=gw * 4) .DismissButton = True .DefaultButton = True If i = 3 Then .Caption = "完了" .OnAction = "Finish" Else .Caption = "次へ >" .OnAction = "NextDialog" End If End With Next End Sub