我有两个复选框,表单控件,如果我选择一个,另一个被取消选中。我不能使用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很新,还在学习。我不知道要解决它,请帮帮我!非常感谢!!
答案 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