Search code examples
excelvbauserform

Remove Dynamically Added Controls from Userform


I have an Excel userform with dynamically added checkboxes.

I add the checkboxes with code that looks like this:

Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)

I want to remove all of these checkboxes.

Dim j As Integer
'Remove all dynamically updated checkboxes
For Each cont In Me.Controls
    For j = 1 To NumControls
        If cont.Name = "Checkbox" & j Then
            Me.Controls.Remove ("Checkbox" & j)
        End If
    Next j
Next cont

I get the following error message:
Error MEssage


Solution

  • A better approach may be to keep track of the controls you create (eg in a collection), and use that to remove them.

    This way your code is not bound to the name format, and can be applied to other control types too.

    Private cbxs As Collection
    
    Private Sub UserForm_Initialize()
        Set cbxs = New Collection
    End Sub
    
    ' Remove all dynamicly added Controls
    Private Sub btnRemove_Click()
        Dim i As Long
        Do While cbxs.Count > 0
            Me.Controls.Remove cbxs.Item(1).Name
            cbxs.Remove 1
        Loop
    End Sub
    
    
    ' Add some Controls, example for testing purposes
    Private Sub btnAdd_Click()
        Dim i As Long
        Dim chkBox As Control
        For i = 1 To 10
            Set chkBox = Me.Controls.Add("Forms.CheckBox.1", "SomeRandomName" & i)
            chkBox.Top = 40 + i * 20
            chkBox.Left = 20
            cbxs.Add chkBox, chkBox.Name  '- populate tracking collection
        Next
    
        ' Demo that it works for other control types
        For i = 1 To 10
            Set chkBox = Me.Controls.Add("Forms.ListBox.1", "SomeOtherRandomName" & i)
            chkBox.Top = 40 + i * 20
            chkBox.Left = 60
            cbxs.Add chkBox, chkBox.Name
        Next
    
    End Sub