マルチページに追加するページ数が実行時にしか分からず、実行時に動的に
追加する必要がある場合には・・・
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
|