Excel 删除所有ActiveX复选框,然后从1开始创建新复选框
我有一个按钮,可以创建复选框。如果我再按一次,我想删除以前的复选框,并用新的复选框替换它们。这是删除和创建新零件的代码:Excel 删除所有ActiveX复选框,然后从1开始创建新复选框,excel,vba,Excel,Vba,我有一个按钮,可以创建复选框。如果我再按一次,我想删除以前的复选框,并用新的复选框替换它们。这是删除和创建新零件的代码: Dim s As Shape For Each s In ActiveSheet.Shapes If s.Type = 12 Then If Not Intersect(s.TopLeftCell, Sheets("EmpChoice").Range("A14:T33")) Is Nothing Then s.Delete
Dim s As Shape
For Each s In ActiveSheet.Shapes
If s.Type = 12 Then
If Not Intersect(s.TopLeftCell, Sheets("EmpChoice").Range("A14:T33")) Is Nothing Then
s.Delete
End If
End If
Next
Dim obj As Object
Dim rng As Range
For i = 1 To EmployeeNo
If i > 6 And i < 13 Then 'Just code that spaces the checkboxes out evenly
col = 3
offset = 12
ElseIf i >= 13 Then
col = 5
offset = 24
Else
col = 1
offset = 0
End If
Set rng = Sheets("EmpChoice").Cells(14 + (i * 2) - offset, col)
cellLeft = rng.Left
cellTop = rng.Top
cellwidth = rng.Width
cellheight = rng.Height
Set obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Checkbox.1", Left:=cellLeft, Top:=cellTop, Width:=cellwidth * 2, Height:=cellheight * 2)
ActiveSheet.OLEObjects("CheckBox" & i).Object.Caption = EmployeeList(i)
Next i
s作为形状的尺寸
对于ActiveSheet.Shapes中的每个
如果s.类型=12,则
如果不相交(s.TopLeftCell,Sheets(“EmpChoice”)。范围(“A14:T33”)则为零
s、 删除
如果结束
如果结束
下一个
作为对象的Dim obj
变暗rng As范围
对于i=1的雇员
如果i>6且i<13,则只需编写代码,将复选框均匀地隔开即可
col=3
偏移量=12
如果i>=13那么
col=5
偏移量=24
其他的
col=1
偏移量=0
如果结束
设置rng=图纸(“EMP选择”)。单元格(14+(i*2)-偏移,列)
cellLeft=右侧左侧
cellTop=rng.Top
单元宽度=平均宽度
单元高度=平均高度
Set obj=ActiveSheet.OLEObjects.Add(类类型:=“Forms.Checkbox.1”,左:=cellLeft,顶:=cellTop,宽:=cellwidth*2,高:=cellheight*2)
ActiveSheet.OLEObjects(“复选框”&i).Object.Caption=EmployeeList(i)
接下来我
问题是,如果代码创建了18个复选框,然后将其删除,那么新的复选框将以“CheckBox19”的名称开头,从而使代码崩溃。是否可以确保新复选框从“CheckBox1”开始?尝试插入obj名称,如在下一段代码中:
Set obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Checkbox.1", Left:=cellLeft, Top:=cellTop, Width:=cellwidth * 2, Height:=cellheight * 2)
obj.Name = "CheckBox" & i 'Here you can choose the name you need...
'Otherwise, VBA keeps track of the previous created objects
ActiveSheet.OLEObjects("CheckBox" & i).Object.Caption = EmployeeList(i)
尝试插入obj名称,如下一段代码:
Set obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Checkbox.1", Left:=cellLeft, Top:=cellTop, Width:=cellwidth * 2, Height:=cellheight * 2)
obj.Name = "CheckBox" & i 'Here you can choose the name you need...
'Otherwise, VBA keeps track of the previous created objects
ActiveSheet.OLEObjects("CheckBox" & i).Object.Caption = EmployeeList(i)
@詹斯:很高兴帮助你!但是,当一个答案解决了您的问题时,最好勾选“代码左侧”复选框,使其成为可接受的答案。这样的话,如果有人想找类似的东西,他就会知道答案是有效的…@Jens:很高兴帮助你!但是,当一个答案解决了您的问题时,最好勾选“代码左侧”复选框,使其成为可接受的答案。这样的话,如果有人会寻找类似的东西,他就会知道答案是有效的。。。