MultiPageの活用−動的なページとコントロールの追加
マルチページに追加するページ数が実行時にしか分からず、実行時に動的に
追加する必要がある場合には・・・

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

Exce97,l2000



戻る


Excel Word Access VBA! モーグ