我正在尝试创建一个宏来选择某列的所有复选框。 例如,我每列有10个标准复选框,每个列的主复选框为“全选”。 我有代码下来选择每个复选框,但无法弄清楚如何稍微调整它只选择或取消选择单元格A2:A10例如,而不是列B,C等中的框。
我正在使用这个简单的脚本;
Sub SelectAll_Click()
Dim CB As Checkbox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("Check Box 1").Name Then
CB.Value = ActiveSheet.CheckBoxes("Check Box 1").Value
End If
Next CB
End Sub
我尝试更改复选框名称的&lt;,&gt;,=失败,以确定比B列的第一个复选框更少的内容 以及添加= range()
我对这一切都是全新的,我肯定有时间和学习我会回顾并嘲笑我的路障,但如果有人能暂时借给我他们的专业知识,那就是非常感谢。
由于
答案 0 :(得分:0)
如果您在工作表中引用复选框作为Shape对象,则可以访问属性.TopLeftCell,它将告诉您复选框所在的列。以下代码适用于A列中的所有表单控件复选框。将列#(此代码中的1)更改为您希望的列,并在每种情况下更改主复选框的名称。
Sub SelectAllColumnA_Click()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoFormControl Then 'Form control
If shp.FormControlType = xlCheckBox Then
If shp.Name = "Check Box 1" Then
'Do not alter value of master check box "Check Box 1"
ElseIf shp.TopLeftCell.Column = 1 Then
shp.ControlFormat.Value = ActiveSheet.CheckBoxes("Check Box 1").Value
End If
End If
End If
Next shp
End Sub
编辑:我简化了代码,因为您说您正在使用表单控件。
Edit2:这是一个简单的添加,它将改变主复选框的状态。
Sub SelectSubCheckBoxA()
ActiveSheet.CheckBoxes("Check Box 1").Value = 2
End Sub
只需将此宏指定给A列中的每个复选框。对于其他列,请创建此宏的新版本并更改主复选框的名称。这样,当您单独选中任何复选框时,它将在视觉上“禁用”主复选框。
答案 1 :(得分:0)
在我看来,您希望根据它们所在的列来检查/取消选中您的框。因此,我建议使用以下代码:
Public Sub CheckComboBoxBasedOnColumn()
Dim chk As CheckBox
For Each chk In Sheet2.CheckBoxes
Select Case Split(chk.TopLeftCell.Address, "$")(1)
Case "A"
'If the checkbox is in column A then check it.
chk.Value = True
Case "B"
'If the checkbox is in column B then un-check it.
chk.Value = False
Case "C"
'... what ever you want for column C
Case Else
'... or any other column
End Select
Next chk
End Sub
如果这解决了您的问题,请告诉我。
答案 2 :(得分:0)
让所有Master-Checkbox的一个宏工作使用调用者并比较topleftcell.column:
Sub CheckComboboxesInColumn()
Dim CallerString As String, CallerBox As CheckBox
Dim chk As CheckBox
CallerString = Application.Caller
Set CallerBox = ActiveSheet.CheckBoxes(CallerString)
For Each chk In ActiveSheet.CheckBoxes
If chk.TopLeftCell.Column = CallerBox.TopLeftCell.Column Then chk.Value = CallerBox.Value
Next chk
End Sub