作者:知知亦不知_710 | 来源:互联网 | 2023-05-28 11:47
我有一个excel Userform,带有动态添加的复选框.我在早期添加了复选框,代码如下所示:
Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
稍后,我想删除所有这些复选框.我正在尝试这段代码:
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
但我收到以下错误消息: ![错误信息](https://img.php1.cn/3cd4a/189d8/978/7dbdf0f38ad53545.jpeg)
任何帮助将不胜感激.
1> chris neilse..:
更好的方法可能是跟踪您创建的控件(例如在集合中),并使用它来删除它们.
这样,您的代码不会绑定到名称格式,也可以应用于其他控件类型.
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
chkBox.Add chkBox, chkBox.Name
Next
End Sub