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

是否可以选择一个复选框并取消选择另一个复选框?(需要VBA),vba,excel,checkbox,Vba,Excel,Checkbox,我有两个复选框,我想做的是当我选择一个,其他1将被取消选择,这意味着用户将没有能力选择它的其他复选框。我想知道是否有可能这样做?是的,有可能。但是为什么不使用选项按钮呢 无论如何,请回答你的问题 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then CheckBox2.Value = False CheckBox2.Enabled = False Else Chec

我有两个复选框,我想做的是当我选择一个,其他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
跟进


谢谢你的快速更新!复选框和选项按钮之间有什么区别?我以为他们会做同样的事用户1204868 48秒前

Excel VBA选项按钮(也称为单选按钮)与复选框相同,只是选项按钮相互依赖,而复选框不相互依赖。选中一个选项按钮时,另一个选项按钮将自动取消选中

有关它们的外观,请参见下面的快照:)

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

快照:


Sid

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

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

1-在用户窗体的属性窗口中使用适当的名称命名用户窗体(复选框位于该窗体上)。name属性是“属性”窗口中的第一个属性(在字母选项卡中)。这是为了便于我们在使用intelissense列表编写必要代码时更容易地调用userform

例如:userform1

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

例如:chkbox1、chkbox2、chkbox3和chkbox4

3-单击userform(在vb编辑器中)中的一个复选框,您会看到已生成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时,会发生一个后更新,其中调用所有chkbox(chkbox1除外)的值,并将其值转换为false

注2:如您所见,我们必须为其他复选框的afterupdate事件编写这样的代码,但请注意只为其他复选框编写代码,例如,如果您为chkbox1编写代码,则不应将chxbox1写入它下面的代码,此规则分别适用于所有其他复选框。如果您不根据此规则编写代码,那么您的代码将无法工作

5-分别为其他3个或etc复选框的后续事件编写正确的代码。代码已经准备好工作了

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

感谢您的快速更新!复选框和选项按钮之间有什么区别?我以为他们会做同样的事?好的。。但请不要删除复选框的答案。。我认为这也会让其他人受益!:)嗨,谢谢!我将看看选项按钮是如何工作的!现在,取消选择已经足够好了+1相关复选框实际上应该是选项按钮。如果一个复选框超过另外两个复选框,则可能需要复选框,但其他两个复选框可以同时选中。这似乎不是问题的完整答案。您只处理只单击第一个复选框的情况。虽然此代码段可能是解决方案,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
Private Sub CheckBox1_Click()

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

    End If

End Sub