Excel 2010checkboxmacros – 如何取消选中另一个框时取消select“全选”checkbox

我有一个excel模型的国家和场景列表。 每个列表都有一个带有“所有国家”和“所有场景”选项的checkbox,它将select与每个相关的所有checkbox。 当我点击“所有国家”checkbox,每个国家的checkbox被正确select。 相同的“所有场景”checkbox。 但是,如果我取消select单个国家/场景,则“所有国家/场景”框将保持检查状态。

如何取消“所有国家”和“所有场景”checkbox以取消select子checkbox时的select?

以下是我到目前为止的代码。

Sub SelectAll_Read() Dim CB As CheckBox For Each CB In ActiveSheet.CheckBoxes If CB.Name <> ActiveSheet.CheckBoxes("MCB.1").Name And CB.Name <> ActiveSheet.CheckBoxes("MCB.2").Name Then If Mid(CB.Name, 5, 1) = "1" Then CB.Value = ActiveSheet.CheckBoxes("MCB.1").Value ElseIf Mid(CB.Name, 5, 1) = "2" Then CB.Value = ActiveSheet.CheckBoxes("MCB.2").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, 5, 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 

如果将其分配给工作表中的所有checkbox,则应该处理同步主<>子状态。

 Sub HandleClick() Dim sht As Worksheet, nm As String Dim arrA, arrB, masterClicked As Boolean Dim c As CheckBox, cb As CheckBox Dim mixedChildValues As Boolean Set sht = ActiveSheet nm = Application.Caller Set cb = sht.CheckBoxes(nm) 'the clicked checkbox arrA = Split(nm, ".") 'split the cb name on "." to give an array masterClicked = (UBound(arrA) = 1) '"master" cb clicked? mixedChildValues = False 'loop over all checkboxes on the sheet For Each c In sht.CheckBoxes 'ignore the clicked checkbox If c.Name <> nm Then arrB = Split(c.Name, ".") 'split the name... If arrA(1) = arrB(1) Then 'only consider same "family" of checkboxes If masterClicked Then 'set all childern to "master" value if master was clicked c.Value = cb.Value Else If (UBound(arrB) = 2) Then 'only look at children... If c.Value <> cb.Value Then mixedChildValues = True Exit For 'no need to check further... End If End If 'child checkbox End If End If 'same family End If 'not the clicked checkbox Next c 'child checkbox was clicked - see if the master needs adjusting... If Not masterClicked Then sht.CheckBoxes(arrA(0) & "." & arrA(1)).Value = IIf(mixedChildValues, -4146, cb.Value) End If End Sub