【问题标题】:is it possible to select one checkbox and deselect the other checkbox? (VBA required)是否可以选择一个复选框并取消选择另一个复选框? (需要 VBA)
【发布时间】:2012-04-04 17:44:42
【问题描述】:

我有 2 个复选框,我想要做的是当我选择一个时,另一个 1 将被取消选中,这意味着用户将无法选择另一个复选框。我想知道是否可以这样做?

【问题讨论】:

    标签: vba excel checkbox


    【解决方案1】:

    是的,这是可能的。但是为什么不使用选项按钮呢?

    无论如何回答你的问题。

    Private Sub CheckBox1_Click()
        If CheckBox1.Value = True Then
            CheckBox2.Value = False
            CheckBox2.Enabled = False
        Else
            CheckBox2.Enabled = True
        End If
    End Sub
    
    Private Sub CheckBox2_Click()
        If CheckBox2.Value = True Then
            CheckBox1.Value = False
            CheckBox1.Enabled = False
        Else
            CheckBox1.Enabled = True
        End If
    End Sub
    

    跟进

    感谢您的快速更新!复选框和选项按钮有什么区别?我以为他们做同样的事情? – user1204868 48 秒前

    Excel VBA 选项按钮也称为单选按钮)除了选项按钮复选框相同strong> 相互依赖,而 Check Boxes 则不依赖。当您选中一个 Option Button 时,另一个 Option Button 将自动取消选中。

    请参阅下面的快照了解它们的外观:)

    建议查看 Excel 的内置 VBA 帮助以了解更多详细信息;)

    快照:

    HTH

    席德

    【讨论】:

    • 感谢您的快速更新!复选框和选项按钮有什么区别?我以为他们做同样的事情?
    • 好的..但请不要删除复选框的答案..我认为它也会有利于其他人! :)
    • 您好,谢谢!我将看看选项按钮是如何工作的!现在,取消选择就足够了!
    • +1 相关复选框应该是选项按钮。
    • 如果一个框超过另外两个框,则可能需要复选框,但其他两个框可以同时选中。
    【解决方案2】:

    我也遇到了这个问题,因为我不想在我的表单上使用选项按钮,所以我为此案例编写了一些代码并且它可以工作!但是可能有一种更合适的方式来为这个问题编写代码。按照以下列表进行操作:

    (例如您的表单中有四个复选框,它们的数量没有区别。)

    1- 在其属性窗口中使用适当的名称命名您的用户窗体(复选框已打开)。 name 属性是属性窗口中的第一个(在字母选项卡中)。这是为了让我们在使用智能感知列表编写必要代码时可以更轻松地调用用户表单。

    例如:userform1

    2- 在它们的属性窗口中用适当的名称命名您的复选框。 name 属性是属性窗口中的第一个(在字母选项卡中)。这是为了让我们在使用智能感知列表编写必要代码时可以更轻松地调用复选框。

    例如:chkbox1、chkbox2、chkbox3 和 chkbox4

    3- 单击用户窗体中的复选框之一(在 vb 编辑器中),您会看到单击事件已生成。单击右侧下拉列表并选择“更新后”事件。删除该复选框的单击事件子例程,以整理 vb 编辑器。

    4- 在这个子程序之间,例如:

    Private Sub Chkbox1_AfterUpdate()
    
    
    End Sub
    

    我们会写这样的代码:

    Private Sub Chkbox1_AfterUpdate()
    
          userform1.Chkbox2.Value = False
          userform1.Chkbox3.Value = False
          userform1.Chkbox4.Value = False
    
    End Sub
    

    注意 1:正如您在此代码中看到的,当用户单击 chkbox1 时,会发生更新后,其中所有 chkbox(chkbox1 除外)的值被调用,并且它们的值变为 false。

    注意 2:如您所见,我们必须为其他复选框的更新后事件编写此类代码,但请注意仅为其他复选框编写代码,例如,如果您为 chkbox1 编写代码,则 chxbox1 应该不要写它下面的代码,这条规则适用于所有其他复选框。如果你不按照这个规则编写代码,那么你的代码就不会工作。

    5- 尊重地为其他 3 个或其他复选框的 afterevent 编写正确的代码。代码就可以工作了。

    如果您想查看必要代码的整体视图(以防万一),对于 1 个用户窗体上的 4 个复选框,它应该如下所示:

    Private Sub Chkbox1_AfterUpdate()
    
          userform1.Chkbox2.Value = False
          userform1.Chkbox3.Value = False
          userform1.Chkbox4.Value = False
    
    End Sub
    
    Private Sub Chkbox2_AfterUpdate()
    
          userform1.Chkbox1.Value = False
          userform1.Chkbox3.Value = False
          userform1.Chkbox4.Value = False
    
    End Sub
    
    Private Sub Chkbox3_AfterUpdate()
    
          userform1.Chkbox1.Value = False
          userform1.Chkbox2.Value = False
          userform1.Chkbox4.Value = False
    
    End Sub
    
    Private Sub Chkbox4_AfterUpdate()
    
          userform1.Chkbox1.Value = False
          userform1.Chkbox2.Value = False
          userform1.Chkbox3.Value = False
    
    End Sub
    

    注意 3:您用于用户窗体和复选框的名称由您决定,没有限制。您可以使用匈牙利符号来获得更多专有名称。

    【讨论】:

      【解决方案3】:
      Private Sub CheckBox1_Click()
      
      If CheckBox2.Enabled = True Then
          CheckBox2.Enabled = False
          Else
          CheckBox2.Enabled = True
      
          End If
      
      End Sub
      

      【讨论】:

      • 这似乎不是问题的完整答案。您只处理仅单击第一个复选框的情况。
      • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 2015-05-08
      • 2019-01-03
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2021-12-23
      相关资源
      最近更新 更多