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 防止填充复制控件?_Excel_Vba - Fatal编程技术网

Excel 防止填充复制控件?

Excel 防止填充复制控件?,excel,vba,Excel,Vba,我有一个excel电子表格,其中有许多复选框,这些复选框与工作表中的单元格相连 然后根据复选框的条件和一些其他数据设置格式 现在我需要更改格式或公式,所以我更改一些单元格,然后填充以更改其余单元格 问题是fill会沿着所有范围复制复选框,这样第一个复选框就会出现在所有单元格中。(复制和粘贴在没有复选框的情况下也可以工作,但由于剪贴板经常被此电子表格或其他电子表格重置,因此复制和粘贴变得很困难。) 是否有任何方法可以停止这种行为,并在填充时将所有复选框保留在它们所在的位置。到目前为止,所有填充选项

我有一个excel电子表格,其中有许多复选框,这些复选框与工作表中的单元格相连

然后根据复选框的条件和一些其他数据设置格式

现在我需要更改格式或公式,所以我更改一些单元格,然后填充以更改其余单元格

问题是fill会沿着所有范围复制复选框,这样第一个复选框就会出现在所有单元格中。(复制和粘贴在没有复选框的情况下也可以工作,但由于剪贴板经常被此电子表格或其他电子表格重置,因此复制和粘贴变得很困难。)

是否有任何方法可以停止这种行为,并在填充时将所有复选框保留在它们所在的位置。到目前为止,所有填充选项都不起作用

一个对我有用的替代方案

所有复选框都是使用vba宏创建的,该宏将复选框放在单元格中,并链接到工作表中的正确单元格。 如果可以先删除复选框,我可以轻松地重新创建它们

我知道有
复选框。请删除
,但我无法在工作表上使用它,因为工作表中还有其他复选框我无法删除。
是否有办法仅删除特定范围内的所有复选框


这将允许我根据需要格式化,删除所有复选框并重新创建它们。

这是为您的替代解决方案准备的。如果您正在动态创建这些,请给它们一个名称,以区别于其他。然后,您可以循环检查每个,检查名称并删除

Sub RemoveCheckBoxes()
Dim checkBoxKeyWord As String
'Lets say this is what each checkbax name starts with
checkBoxKeyWord = "cbRemovable"

Dim shp As Shape
'loop through the sheet and check the shapes (Form controls are shapes)
For Each shp In Sheets(1).Shapes
    'see if the name matches
    If Left(shp.Name, Len(checkBoxKeyWord)) = checkBoxKeyWord Then
        'delete the checkbox
        shp.Delete
    End If

Next

End Sub
这是一个检查范围的版本

Sub RemoveCheckBoxes()
Dim checkBoxKeyWord As String
Dim r As Range
Set r = Sheets(1).Columns("B")
'Lets say this is what each checkbax name starts with
checkBoxKeyWord = "cbRemovable"

Dim shp As Shape
'loop through the sheet and check the shapes (Form controls are shapes)
For Each shp In Sheets(1).Shapes
    'see if the name matches
    If Left(shp.Name, Len(checkBoxKeyWord)) = checkBoxKeyWord Then
        Dim cbRange As Range
        Set cbRange = Sheets(1).Range(shp.ControlFormat.LinkedCell)
        If Not Application.Intersect(cbRange, r) Is Nothing Then
            'delete the checkbox as its linked cell is in the range
            shp.Delete
        End If
    End If
Next

End Sub

复选框是表单控件还是activex控件?我相信它们是表单控件。”作为VBA中的复选框。谢谢,这太棒了。但是,它只适用于将来的复选框。我仍然必须删除我已经创建的所有额外复选框。我正在尝试查找LinkedCell属性,看看它是否在范围内。否则,简单地单步执行代码仍然比手动删除快得多。