Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除所有ActiveX复选框,然后从1开始创建新复选框_Excel_Vba - Fatal编程技术网

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:很高兴帮助你!但是,当一个答案解决了您的问题时,最好勾选“代码左侧”复选框,使其成为可接受的答案。这样的话,如果有人会寻找类似的东西,他就会知道答案是有效的。。。