[英]VBA Excel CheckBox to select all of some specific Checkboxes on Sheet
我有一个包含两列CheckBox的Excel工作表,每列的第一个CheckBox是切换所有其他CheckBox的“ Master”复选框。
我从本教程中获得了代码。
在我将代码复制到第二列之前,它一直运行良好。
激活第一个或第二个“主”复选框时,它会激活所有复选框。
第一个“主”复选框称为“ MCB1”,第二个在此代码的副本中(带有另一个子名称),称为MCB2。
这是我的代码:
Sub SelectAll_Read()
Dim CB As CheckBox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("MCB1").Name Then
CB.Value = ActiveSheet.CheckBoxes("MCB1").Value
End If
Next CB
End Sub
Sub Mixed_ReadState()
Dim CB As CheckBox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("MCB1").Name And CB.Value <> ActiveSheet.CheckBoxes("MCB1").Value And ActiveSheet.CheckBoxes("MCB1").Value <> 2 Then
ActiveSheet.CheckBoxes("MCB1").Value = 2
Exit For
Else
ActiveSheet.CheckBoxes("MCB1").Value = CB.Value
End If
Next CB
End Sub
首先,您需要区分第1列和第2列中的复选框。
例如,您可以在第1列MCB1.1
跟随者复选框命名为MCB1.1
, MCB1.2
, MCB1.3
等。 第2列中的复选框的MCB2.1
相同: MCB2.1
, MCB2.2
, MCB2.3
...
列1和2中的“主”复选框可以命名为MCB1
和MCB2
。
然后,您的代码需要进行如下修改:(没有时间对其进行测试)
Sub SelectAll_Read()
Dim CB As CheckBox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("MCB1").Name And CB.Name <> ActiveSheet.CheckBoxes("MCB2").Name Then
If Mid(CB.Name, 4, 1) = "1"
CB.Value = ActiveSheet.CheckBoxes("MCB1").Value
ElseIf Mid(CB.Name, 4, 1) = "2"
CB.Value = ActiveSheet.CheckBoxes("MCB2").Value
End If
End If
Next CB
End Sub
Sub Mixed_ReadState()
Dim CB As CheckBox
Dim i As String
For Each CB In ActiveSheet.CheckBoxes
i = Mid(CB.Name, 4, 1)
If CB.Name <> ActiveSheet.CheckBoxes("MCB" & i).Name And CB.Value <> ActiveSheet.CheckBoxes("MCB" & i).Value And ActiveSheet.CheckBoxes("MCB" & i).Value <> 2 Then
ActiveSheet.CheckBoxes("MCB" & i).Value = 2
Exit For
Else
ActiveSheet.CheckBoxes("MCB" & i).Value = CB.Value
End If
Next CB
End Sub
这种替代方法对我有用
Sub SelectAll_CHECK_BOX()
Dim CB As CheckBox
Dim CB1 As Range
Set CB1 = ActiveSheet.Range("A1:A30")
For Each CB In ActiveSheet.CheckBoxes
If Not Intersect(CB.TopLeftCell, CB1) Is Nothing Then
CB.Value = ActiveSheet.CheckBoxes("MCB1").Value
End If
Next CB
Dim CB2 As Range
Set CB2 = ActiveSheet.Range("B1:B30")
For Each CB In ActiveSheet.CheckBoxes
If Not Intersect(CB.TopLeftCell, CB2) Is Nothing Then
CB.Value = ActiveSheet.CheckBoxes("MCB2").Value
End If
Next CB
End Sub
Sub Mixed_ReadState()
Dim CB As CheckBox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("MCB1").Name And CB.Value <> ActiveSheet.CheckBoxes("MCB1").Value And ActiveSheet.CheckBoxes("MCB1").Value <> 2 Then
ActiveSheet.CheckBoxes("MCB1").Value = 2
Exit For
Else
ActiveSheet.CheckBoxes("MCB1").Value = CB.Value
End If
Next CB
End Sub`
Sub Mixed_ReadState()
Dim CB As CheckBox
For Each CB In ActiveSheet.CheckBoxes
If CB.Name <> ActiveSheet.CheckBoxes("MCB2").Name And CB.Value <> ActiveSheet.CheckBoxes("MCB2").Value And ActiveSheet.CheckBoxes("MCB2").Value <> 2 Then
ActiveSheet.CheckBoxes("MCB2").Value = 2
Exit For
Else
ActiveSheet.CheckBoxes("MCB2").Value = CB.Value
End If
Next CB
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.