是否可以选择一个复选框并取消选中另一个复选框? (需要VBA)

时间:2012-03-20 08:51:19

标签: vba excel-vba checkbox excel

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

3 个答案:

答案 0 :(得分:11)

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

无论如何都要回答你的问题。

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 选项按钮也称为单选按钮)与复选框相同,但选项按钮相互依赖,而复选框则不是。当您选中一个选项按钮时,其他选项按钮将自动取消选中。

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

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

<强>快照:

enter image description here

HTH

西特

答案 1 :(得分:0)

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

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

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

例如:userform1

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

例如:chkbox1,chkbox2,chkbox3和chkbox4

3-单击userform中的一个复选框(在vb编辑器中),您会看到已生成click事件。点击右侧下拉列表,然后在更新后选择&#34;&#34;事件。删除该复选框的click事件子例程,以便整理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时,会发生afterupdate,其中调用所有chkbox(chkbox1除外)的值并将其值变为false。

注意2:正如您所看到的,我们必须为其他复选框写这样的内容。 afterupdate事件,但要小心只为其他复选框编写代码,例如,如果你编写chkbox1的代码,那么chxbox1不应该写在它下面的代码,这个规则是针对所有其他的尊敬的复选框。如果您不根据此规则编写代码,那么您的代码将无法正常工作。

5-为其他3或等复选框写下正确的代码&#39;事先得到预防。并且代码已准备就绪。

如果您想查看必要代码的整体视图(以防万一),对于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:您用于用户表单的名称和复选框由您决定,没有任何限制。您可以使用匈牙利语表示法来获得更多专有名称。

答案 2 :(得分:-1)

Private Sub CheckBox1_Click()

If CheckBox2.Enabled = True Then
    CheckBox2.Enabled = False
    Else
    CheckBox2.Enabled = True

    End If

End Sub