从用户窗体中删除dynamic添加的控件
我有一个Excel的用户窗体dynamic添加checkbox。 我很早就join了checkbox,代码如下所示:
Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
之后,我想删除所有这些checkbox。 我试着这个代码:
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
但是收到以下错误信息:
任何帮助将不胜感激。
一个更好的方法可能是跟踪你创build的控件(例如在一个集合中),并用它来删除它们。
这样你的代码就不会被绑定到名称格式上,也可以应用到其他控件types。
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
如果你已经知道控件的名称,types和多less,为什么双循环?
注意只能删除在运行时创build的控件。
'the following removes all controls created at runtime Dim i As Long On Error Resume Next With Me.Controls For i = .Count - 1 to 0 step -1 .Remove i Next i End With Err.Clear: On Error GoTo 0
并为你的情况:“如果所有的命名是正确的
Dim j& For j = 1 To NumControls Me.Controls.Remove "Checkbox" & j Next j
添加一个检查控制似乎解决这个问题。 不完全确定为什么,但它的工作原理。
Dim j As Integer 'Remove all dynamically updated checkboxes For Each cont In Me.Controls If TypeName(cont) = "CheckBox" Then For j = 1 To NumControls If cont.Name = "Checkbox" & j Then Me.Controls.Remove cont.Name Exit For End If Next j End If Next cont
假设没有其他控件名称以“checkbox”开头,
For Each cont In Me.Controls If InStr(cont.Name, "Checkbox") = 1 Then Me.Controls.Remove cont.Name End If Next cont