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

参考ページ

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

Remove メソッド (Microsoft Forms)



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

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

このメソッドは、実行時に追加されたコントロールを削除します。 一方、デザイン時に追加されたコントロールを削除しようとすると、エラーが発生します。

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



エラー内容

実行時エラー'444':
コントロールを削除できません。s.このメソッドは、このオブジェクトに対しては使えません。

コメント

タイトルとURLをコピーしました