使用主复选框选择特定的复选框

问题描述:

我试图创建一个宏来选择某个列的所有复选框。 例如,对于每列,我有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 的第一复选框除了在=范围添加()

我的对于所有这些都是全新的,我敢肯定,随着时间的推移和学习,我会回顾并嘲笑我的路障,但如果有人能够暂时借给我他们的专业知识,我们将不胜感激。

感谢

+0

你在使用 - 表单控件或ActiveX控件? – Spidey

+0

[复选框以选中并取消选择电子表格中的所有其他复选框]可能的重复(http://*.com/questions/15301445/check-box-to-select-and-deselect-all-other-check-boxes在电子表格) –

+0

窗体控件**对不起 – Awill

为了有一个宏观调控工作的所有主 - 复选框使用来电显示和比较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 
+0

这正是我最初寻找的谢谢你。 因为我用一个按钮换掉了我的主复选框,我试图改变字符串来识别按钮,但是失败了,因此我的电子表格转换回所有复选框。 我假设它比将主题复选框标识符替换为按钮更复杂。 – 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中的每个复选框。对于其他列,创建此宏的新版本并更改主复选框的名称。这样,当您单独选中任何复选框时,它将在视觉上“禁用”主复选框。

+0

非常感谢,只是经过测试,并且每列都有效。唯一的情况是,“主”复选框始终处于选中状态。每次单击它时,我都可以选择并取消选择整个列,但是支票将保留在该框中。我认为这不是什么大问题,如果我可以用一个按钮替换全选复选框,但看着脚本,这是行不通的。 – Awill

+0

这很奇怪,它似乎在我的测试文件中工作正常。你的模块中是否还有其他代码可以改变复选框?也许你正在触发另一个事件,然后编辑mastercheckbox。 此代码应该与一个按钮一起工作,只需删除主复选框的检查(因为这通过复选框循环,它不会看到你的主“按钮”)。 – Swaffle

+0

再次感谢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 

让我知道这是否解决了您的问题。

+0

感谢您的回复,我不认为这真的是我的意图。我不想取消选择其他列,同时选择另一列。我将设置多个主复选框来选择同一列中的所有复选框。所以主复选框是A1,我希望它选择列A中的所有框; B1中的另一个主复选框,选择列B中的所有框。 – Awill