Remove Dynamically Added Controls from Userform

前端 未结 6 532
野的像风
野的像风 2021-01-02 01:13

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         


        
6条回答
  •  旧巷少年郎
    2021-01-02 01:55

    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
    

提交回复
热议问题