VBAで実行時にフォームのコントロールを追加削除する

Share on:

参考ページ

Page オブジェクト、MultiPage コントロール、Add メソッド、Clear メソッド、Remove メソッドの例

Remove メソッド (Microsoft Forms)

コントロールの追加、削除の注意点

Remove メソッド (Microsoft Forms)に記載されるように削除したいコントロールは実行時に追加されたものである必要があります。

追加、削除の良い例

ボタンクリックでテキストボックスの追加や削除を行う例です。

フォームを作成ではボタンを配置するだけで、テキストボックスは配置していません。

UserForm1のコードの内容

 1Private Sub AddButton_Click()
 2    ' テキストボックスの数を取得
 3    Dim cnt As Integer
 4    cnt = controlCounts("TextBox")
 5 
 6    ' テキストボックス追加
 7    cnt = cnt + 1
 8    Dim newTextBox As MSForms.textBox
 9    Set newTextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & Str(cnt))
10    With newTextBox
11      .Width = 60
12      .Height = 20
13      .Left = 20
14      .Top = cnt * 21 - 12
15    End With
16 
17End Sub
18 
19Private Sub DeleteButton_Click()
20    ' テキストボックスの数を取得
21    Dim cnt As Integer
22    cnt = controlCounts("TextBox")
23 
24    ' コントロールの数が0なら何もしない
25    If cnt = 0 Then
26        Exit Sub
27    End If
28 
29    ' 最後に追加したテキストボックス削除
30    Me.Controls.Remove "TextBox" & Str(cnt)
31End Sub
32 
33Function controlCounts(ctrlType As String)
34    ' 指定したタイプのコントロールの数を取得
35    Dim cnt As Integer
36    cnt = 0
37    For Each c In Me.Controls
38        If TypeName(c) = ctrlType Then
39            cnt = cnt + 1
40        End If
41    Next
42    controlCounts = cnt
43End Function

追加、削除の悪い例

フォームの作成時にテキストボックスを配置して、そのテキストボックスをボダンクリック時に削除しようとするとエラーになってしまいます。

UserForm1のコードの内容

1Private Sub DeleteButton_Click()
2    Me.Controls.Remove "TextBox1"
3End Sub

エラー内容