HOME > 即効テクニック > Excel VBA > ページ設定関連のテクニック > MultiPageの活用−動的なページとコントロールの追加

即効テクニック

ページ設定関連のテクニック

MultiPageの活用−動的なページとコントロールの追加

(Excel 97/2000)
マルチページに追加するページ数が実行時にしか分からず、実行時に動的に追加する必要がある場合には・・・
  1. ページの追加方法
  2. ページへのコントロールの追加方法
  3. 追加したコントロールのイベント処理
  4. ページ内外のコントロール間でのデータのやり取り
などが問題になります。 サンプルではワークシート数分のページをMultiPageに配置し、各ページにコマンドボタンを配置します。コマンドボタンのクリックイベント処理にはクラスを利用し、クリック時にはページの名称を取得し、ページ外のテキストボックスに転記します。 (前提) ・UserForm1, MultiPage1、TextBox1 ・クラスモジュール(Class1) 
'=========フォームモジュール=========
Dim Cls() As Class1

Private Sub UserForm_Initialize()

    Dim NumOfAdd As Integer
    Dim i As Integer, j As Integer
    Dim Ctrl As Control
    Dim P As Page

    With MultiPage1
       'シート数 - デフォルトのページ数分だけページの追加
        NumOfAdd = Worksheets.Count - .Pages.Count
        If NumOfAdd < 1 Then Exit Sub
        For i = 1 To NumOfAdd
            .Pages.Add
        Next i

        For Each P In .Pages
            '各ページにテキストボックスとコマンドボタンを配置
            Set Ctrl = P.Controls.Add("Forms.CommandButton.1")

            With Ctrl
                .Top = 50: .Left = 100: .Width = 100
                .Caption = Ctrl.Name
            End With

            'ページごとに配置したコマンドボタンごとにクラスを生成
            ReDim Preserve Cls(j)
            Set Cls(j) = New Class1
            'クラス内部で宣言された変数にコマンドボタンを割り当てる
            Set Cls(j).Cmd = Ctrl
            j = j + 1
        Next

    End With

End Sub

Private Sub UserForm_QueryClose _
    (Cancel As Integer, CloseMode As Integer)
    Erase Cls
End Sub

'=========クラスモジュール=========
Public WithEvents Cmd As MSForms.CommandButton

Private Sub Cmd_Click()
'選択中ページのNameプロパティーを書き込む
    With UserForm1
        .TextBox1.Value = .MultiPage1.SelectedItem.Name
    End With

End Sub