VBAで実行時にフォームのコントロールを追加削除する
2020/03/07 categories:VBA| tags:VBA|
VBAで実行時にフォームのコントロールを追加削除してみる
参考ページ
Page オブジェクト、MultiPage コントロール、Add メソッド、Clear メソッド、Remove メソッドの例
コントロールの追加、削除の注意点
Remove メソッド (Microsoft Forms)に記載されるように削除したいコントロールは実行時に追加されたものである必要があります。
追加、削除の良い例
ボタンクリックでテキストボックスの追加や削除を行う例です。
フォームを作成ではボタンを配置するだけで、テキストボックスは配置していません。
UserForm1のコードの内容
Private Sub AddButton_Click()
' テキストボックスの数を取得
Dim cnt As Integer
cnt = controlCounts("TextBox")
' テキストボックス追加
cnt = cnt + 1
Dim newTextBox As MSForms.textBox
Set newTextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & Str(cnt))
With newTextBox
.Width = 60
.Height = 20
.Left = 20
.Top = cnt * 21 - 12
End With
End Sub
Private Sub DeleteButton_Click()
' テキストボックスの数を取得
Dim cnt As Integer
cnt = controlCounts("TextBox")
' コントロールの数が0なら何もしない
If cnt = 0 Then
Exit Sub
End If
' 最後に追加したテキストボックス削除
Me.Controls.Remove "TextBox" & Str(cnt)
End Sub
Function controlCounts(ctrlType As String)
' 指定したタイプのコントロールの数を取得
Dim cnt As Integer
cnt = 0
For Each c In Me.Controls
If TypeName(c) = ctrlType Then
cnt = cnt + 1
End If
Next
controlCounts = cnt
End Function
追加、削除の悪い例
フォームの作成時にテキストボックスを配置して、そのテキストボックスをボダンクリック時に削除しようとするとエラーになってしまいます。
UserForm1のコードの内容
Private Sub DeleteButton_Click()
Me.Controls.Remove "TextBox1"
End Sub