使用主复选框选择特定的复选框
我试图创建一个宏来选择某个列的所有复选框。 例如,对于每列,我有10个标准复选框,每个列有主复选框作为“全选”。 我的代码向下选择每个复选框,但无法弄清楚如何小幅调整它,只选择或不选择单元格A2:在列B,C等A10例如,而不是箱使用主复选框选择特定的复选框
我使用这个简单的脚本;
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
我曾尝试改变<,>,=复选框名称以识别出声小于塔B 的第一复选框除了在=范围添加()
我的对于所有这些都是全新的,我敢肯定,随着时间的推移和学习,我会回顾并嘲笑我的路障,但如果有人能够暂时借给我他们的专业知识,我们将不胜感激。
感谢
为了有一个宏观调控工作的所有主 - 复选框使用来电显示和比较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
这正是我最初寻找的谢谢你。 因为我用一个按钮换掉了我的主复选框,我试图改变字符串来识别按钮,但是失败了,因此我的电子表格转换回所有复选框。 我假设它比将主题复选框标识符替换为按钮更复杂。 – Awill
如果引用的复选框为表内的Shape对象,那么你可以访问属性.TopLeftCell它会告诉你该复选框位于哪一列。下面的代码将所有表单控件检查工作只需将列#(此代码中为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
编辑:我简化了代码,因为你说你正在使用窗体控件。
编辑2:这是一个简单的添加,它将改变主复选框的状态。
Sub SelectSubCheckBoxA()
ActiveSheet.CheckBoxes("Check Box 1").Value = 2
End Sub
只需将此宏分配给列A中的每个复选框。对于其他列,创建此宏的新版本并更改主复选框的名称。这样,当您单独选中任何复选框时,它将在视觉上“禁用”主复选框。
非常感谢,只是经过测试,并且每列都有效。唯一的情况是,“主”复选框始终处于选中状态。每次单击它时,我都可以选择并取消选择整个列,但是支票将保留在该框中。我认为这不是什么大问题,如果我可以用一个按钮替换全选复选框,但看着脚本,这是行不通的。 – Awill
这很奇怪,它似乎在我的测试文件中工作正常。你的模块中是否还有其他代码可以改变复选框?也许你正在触发另一个事件,然后编辑mastercheckbox。 此代码应该与一个按钮一起工作,只需删除主复选框的检查(因为这通过复选框循环,它不会看到你的主“按钮”)。 – Swaffle
再次感谢swaffe, 看起来它是同时重新选中主复选框,因为它与“追随者”框位于同一列。 我确实希望select all复选框与它选择的框位于同一列,是否没有办法设置范围而不是整列? – Awill
在我看来,你想根据它们所在的列来检查/取消选中你的框。因此,我会提出以下代码:
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
让我知道这是否解决了您的问题。
感谢您的回复,我不认为这真的是我的意图。我不想取消选择其他列,同时选择另一列。我将设置多个主复选框来选择同一列中的所有复选框。所以主复选框是A1,我希望它选择列A中的所有框; B1中的另一个主复选框,选择列B中的所有框。 – Awill
你在使用 - 表单控件或ActiveX控件? – Spidey
[复选框以选中并取消选择电子表格中的所有其他复选框]可能的重复(http://stackoverflow.com/questions/15301445/check-box-to-select-and-deselect-all-other-check-boxes在电子表格) –
窗体控件**对不起 – Awill