【问题标题】:excel checkboxes controlexcel复选框控件
【发布时间】: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

【问题讨论】:

    标签: excel vba checkbox


    【解决方案1】:

    你可以试试这段代码;我建议在一个新文件中测试它,如果它有效,你可以将它嵌入到你的实际文件中。

    您可以执行以下步骤

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

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

    以下是您可以分配给复选框 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
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2011-07-20
      • 2014-02-08
      • 2018-03-29
      • 2015-05-18
      • 1970-01-01
      • 2018-03-12
      • 2017-07-11
      相关资源
      最近更新 更多