Excel复选框控制

时间:2018-11-20 10:04:20

标签: excel vba checkbox

我是VBA的入门者。

我在excel(非活动X)中创建了多个复选框,我想进行某种控制:我有一个名为A,B,C和D的复选框 我想做一个(或多个)VBA宏: 如果B被选中/未选中,则C和D被选中/未选中 如果A被选中/未选中,则B,C和D被选中/未选中

对于整个控件,我尝试了以下操作:

DEP_ID

结束子

但是我有一个问题: 始终选中与宏链接的复选框(尽管每次单击时,其他复选框都会按预期状态切换),可能是因为它与其他复选框一样包含在循环中。 实际上,我希望能够将复选框状态应用于其他复选框的确定且有限的列表中

我找不到是否可以根据其位置或名称来选择一组复选框

任何人都可以帮忙

谢谢

以下是答案中的完整解决方案

我创建四个复选框,案例1,案例2,案例3,案例4。

案例1一次控制另外3个案例:当On =>全部打开时,Off =>全部关闭。

每个其他都可以单独切换:当“关闭”时,情况1变为“关闭”;当“打开”时,如果其他情况都为“打开”,则情况1会打开。

以下是用于完成此操作的宏:

CONNECT BY PRIOR

1 个答案:

答案 0 :(得分:1)

您可以尝试以下代码;我建议在一个新文件中对其进行测试,如果可以运行,则可以将其嵌入到实际文件中。

您可以执行以下步骤

  1. 创建复选框
  2. 给它们分配一些适当的名称,这些名称将用于 在vba中引用它们
  3. 右键单击要用作触发器的每个复选框,并为它们分配在单击时将被调用的宏

我创建了4个复选框,分别命名为CHB_A,CHB_B,CHB_C和CHB_D

enter image description here

以下是您可以分配给复选框A的宏,当单击它时,该宏将被调用

Sub CHB_A_Click()

    chb_a = ActiveSheet.CheckBoxes("CHB_A").Value

    If chb_a = xlOff Then
        ActiveSheet.CheckBoxes("CHB_B").Value = xlOff
        ActiveSheet.CheckBoxes("CHB_C").Value = xlOff
        ActiveSheet.CheckBoxes("CHB_D").Value = xlOff
    ElseIf chb_a = xlOn Then
        ActiveSheet.CheckBoxes("CHB_B").Value = xlOn
        ActiveSheet.CheckBoxes("CHB_C").Value = xlOn
        ActiveSheet.CheckBoxes("CHB_D").Value = xlOn
    End If

End Sub

我已经测试了您的代码,并且正在切换所有复选框的状态

对于您的声明,“始终选中链接到宏的复选框(尽管每次单击时,其他复选框的状态都会按预期切换)”

这是因为如果您单击一个并选中/取消选中它,则它将立即再次切换,因为代码正在切换所有复选框的状态。您不会看到区别。