选中其他复选框时取消选中复选框

时间:2018-03-14 19:58:43

标签: vba excel-vba checkbox excel

我有两个复选框,表单控件,如果我选择一个,另一个被取消选中。我不能使用ActiveX控件,因为其他工作表中有许多其他复选框是表单控件。我不能使用选项按钮,因为我需要得到" true" "假"值。

我在下面使用了以下代码:

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

但它显示

  

运行时错误' 424',需要对象

我对VBA很新,还在学习。我不知道要解决它,请帮帮我!非常感谢!!

2 个答案:

答案 0 :(得分:0)

您说您不能使用ActiveX,但您的代码是ActiveX事件。 MSForms.Checkboxes没有事件。使用表单控件,您可以为控件分配宏。您可以将同一个宏分配给多个控件,并使用Application.Caller确定哪个控件称为它。

Sub CheckBoxClicked()

    Dim chkClicked As CheckBox
    Dim chkOther As CheckBox

    Set chkClicked = Sheet1.CheckBoxes(Application.Caller)

    If chkClicked.Enabled Then
        If Application.Caller = "Check Box 1" Then
            Set chkOther = Sheet1.CheckBoxes("Check Box 2")
        Else
            Set chkOther = Sheet1.CheckBoxes("Check Box 1")
        End If

        chkOther.Value = False
        chkOther.Enabled = False

    End If

End Sub

这是标准模块,而不是表单模块。

Checkbox已被弃用,但仍适用于我。您可以使用未弃用的Shape对象执行相同的操作。

Sub CheckBoxClicked()

    Dim chkClicked As Shape
    Dim chkOther As Shape

    Set chkClicked = Sheet1.Shapes(Application.Caller)

    If chkClicked.OLEFormat.Object.Enabled Then
        If Application.Caller = "Check Box 1" Then
            Set chkOther = Sheet1.Shapes("Check Box 2")
        Else
            Set chkOther = Sheet1.Shapes("Check Box 1")
        End If

        chkOther.OLEFormat.Object.Value = False
        chkOther.OLEFormat.Object.Enabled = False

    End If

End Sub

修改

如果您只关心在单击复选框1时禁用复选框2,则代码会变得更简单。

Sub CheckBoxClicked()

    Dim chkClicked As CheckBox
    Dim chkOther As CheckBox

    Set chkClicked = Sheet1.CheckBoxes("Check Box 1")
    Set chkOther = Sheet1.CheckBoxes("Check Box 2")

    If chkClicked.Enabled Then

        chkOther.Value = False
        chkOther.Enabled = False

    End If

End Sub

您只能将此宏指定给复选框1。

答案 1 :(得分:0)

请使用此代码

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

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