代码之家  ›  专栏  ›  技术社区  ›  A.Joly

Excel复选框控件

  •  0
  • A.Joly  · 技术社区  · 6 年前

    我是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
    

    结束子

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

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

    有人能帮忙吗

    谢谢您

    这是答案的完整答案 :

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

    案例1同时控制其他3个:打开时=>全部打开,关闭时=>全部关闭。

    其他的每一个都可以单独切换:当关闭时,情况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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   usmanhaq    6 年前

    您可以尝试此代码;我建议在新文件中测试它,如果它有效,您可以将其嵌入到实际文件中。

    您可以执行以下步骤

    1. 创建复选框
    2. 给他们分配一些合适的名字 在VBA中引用它们
    3. 右键单击要作为触发器的每个复选框,并将宏分配给将在单击时调用的宏。

    我创建了4个复选框,分别命名为chb_a、chb_b、chb_c和chb_d

    下面是一个宏,您可以将其分配给复选框A,单击它时,将调用该宏

    sub-chb_a_click()。
    
    chb_a=activesheet.checkbox(“chb_a”).value
    
    如果chb_a=xloff,那么
    activeSheet.checkbox(“chb_b”).value=xloff
    activeSheet.checkbox(“chb_c”).value=xloff
    activeSheet.checkbox(“chb_d”).value=xloff
    Elseif chb_a=xlon然后
    activeSheet.checkbox(“chb_b”).value=xlon
    activeSheet.checkbox(“chb_c”).value=xlon
    activeSheet.checkbox(“chb_d”).value=xlon
    结束如果
    
    结束子
    < /代码> 
    
    

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

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

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

    聚苯乙烯

    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
    

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

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

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