VBA Excelcheckboxselect工作表上的所有特定checkbox
我有一个Excel工作表,其中第一个checkboxCheckBox的两列是“主”checkbox,切换所有其他checkbox。
我从本教程中获得了代码。
它工作正常,直到我复制到第二列的代码。
当激活第一个或第二个“主”checkbox,它激活所有checkbox。
第一个“主”checkbox被称为“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列中的checkbox与第2列中的checkbox区分开来。
例如,您可以在第1列MCB1.1
追随者checkbox命名为MCB1.1
, MCB1.2
, MCB1.3
等等。 第2栏中的checkbox也是一样的: MCB2.1
, MCB2.2
, MCB2.3
…
列1和2中的“主”checkbox可以命名为MCB1
和MCB2
。
然后你的代码需要修改如下:(没有时间去testing它)
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
- 在vba中打开表单时禁用checkbox
- 使用一个variables来select一个ActiveX控件checkbox的名称(在Excel中的Word)?
- 根据checkboxselect隐藏/取消隐藏整行
- 用户自定义命令button,基于checkbox复制True / False
- VBA – 编程类操作用户窗体上的所有checkbox时出错
- Microsoft Excel ::checkboxmacros
- 只有在checkbox被选中的情况下运行一个macros,并且当每个checkbox未被选中时,它将恢复到一个设置的“正常”状态
- 如何使用OpenXML SDK访问Excel工作表中的FormControlcheckbox
- 如何处理100多个IF语句