【发布时间】:2019-04-22 18:02:32
【问题描述】:
我是 VBA 的初学者。
我在 excel 中创建了几个复选框(不是活动 X),我想做特定类型的控制:我有名为 A、B、C 和 D 的复选框 我想做一个(或多个)VBA 宏: 如果 B 被选中/未选中,则 C 和 D 被选中/未选中 如果 A 被选中/未选中,则 B、C 和 D 被选中/未选中
我为整个控件尝试了以下方法:
Sub BoucleCheckBoxes_Formulaire()
Dim Cb As CheckBox
'Boucle sur les checkboxes formulaires de la Feuil1
For Each Cb In ActiveSheet.CheckBoxes
'si la case est cochée
'(utilisez xlOff pour vérifier le statut "décoché")
If Cb.Value = xlOn Then
Cb.Value = xlOff
Else
If Cb.Value = xlOff Then
Cb.Value = xlOn
End If
End If
Next Cb
End Sub
但是我有一个问题: 始终选中链接到宏的复选框(尽管每次单击其他复选框时都会按预期状态切换),可能是因为它与其他复选框一样包含在循环中。 事实上,我希望能够将复选框状态应用于确定且有限的其他复选框列表
我找不到是否可以根据位置或名称选择一组复选框
谁能帮忙
谢谢
这是来自答案的完整解决方案:
我创建了四个复选框,案例 1、案例 2、案例 3、案例 4。
案例 1 同时控制其他 3 个:当 On => 全部开启时,当 Off => 全部关闭时。
每个人都可以单独切换:当关闭时,案例 1 变为关闭,当开启时,如果其他人开启则案例 1 开启。
以下是用于完成此操作的宏:
Sub Case_1_Cliquer()
c1 = ActiveSheet.CheckBoxes("Case 1").Value
If c1 = xlOff Then
ActiveSheet.CheckBoxes("Case 2").Value = xlOff
ActiveSheet.CheckBoxes("Case 3").Value = xlOff
ActiveSheet.CheckBoxes("Case 4").Value = xlOff
ElseIf c1 = xlOn Then
ActiveSheet.CheckBoxes("Case 2").Value = xlOn
ActiveSheet.CheckBoxes("Case 3").Value = xlOn
ActiveSheet.CheckBoxes("Case 4").Value = xlOn
End If
End Sub
Sub Case2_Cliquer()
c2 = ActiveSheet.CheckBoxes("Case 2").Value
c3 = ActiveSheet.CheckBoxes("Case 3").Value
c4 = ActiveSheet.CheckBoxes("Case 4").Value
If c2 = xlOff Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOff
End If
If c2 = xlOn Then
If ((c3 = xlOn) And (c4 = xlOn)) Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOn
End If
End If
End Sub
Sub Case3_Cliquer()
c2 = ActiveSheet.CheckBoxes("Case 2").Value
c3 = ActiveSheet.CheckBoxes("Case 3").Value
c4 = ActiveSheet.CheckBoxes("Case 4").Value
If c3 = xlOff Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOff
End If
If c3 = xlOn Then
If ((c2 = xlOn) And (c4 = xlOn)) Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOn
End If
End If
End Sub
Sub Case4_Cliquer()
c2 = ActiveSheet.CheckBoxes("Case 2").Value
c3 = ActiveSheet.CheckBoxes("Case 3").Value
c4 = ActiveSheet.CheckBoxes("Case 4").Value
If c4 = xlOff Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOff
End If
If c4 = xlOn Then
If ((c3 = xlOn) And (c2 = xlOn)) Then
ActiveSheet.CheckBoxes("Case 1").Value = xlOn
End If
End If
End Sub
【问题讨论】: