VBA:在值更改时阻止触发_Click事件

时间:2017-01-12 10:05:31

标签: excel vba excel-vba infinite-loop

我已经考虑过这个问题好几个月了,经过这么多的研究,它仍然没有得到解决。我正在使用Excel Checkbox并尝试使系统万无一失,而“如果A& B不能一起出现,如果点击A并且你点击B,那么宏就会为你取消A”。

然而,我遇到的问题是这开始(如下面的代码所示)无限循环,

第一个Sub:

Private Sub CheckBoxD11_Click()

    If CheckBoxD12.Value = True Then

        CheckBoxD12.Value = False
        Worksheets("Dynamic_Parking_Sheet").Range("D9").Interior.ColorIndex = 20

        CheckBoxD11.Value = True
        Worksheets("Dynamic_Parking_Sheet").Range("B8:E8").Interior.ColorIndex = 2
    End If

    TextBox1_Change
    TextBox2_Change

    If CheckBoxD11.Value = True Then
        Worksheets("Dynamic_Parking_Sheet").Range("B9:E9").Interior.Color = RGB(221, 221, 221)

        Worksheets("Dynamic_Parking_Sheet").Range("D8").Interior.ColorIndex = 4
    Else
        Worksheets("Dynamic_Parking_Sheet").Range("B9:E9").Interior.ColorIndex = 20

        Worksheets("Dynamic_Parking_Sheet").Range("D8").Interior.ColorIndex = 2
    End If

End Sub

..和第二个Sub:

Private Sub CheckBoxD12_Click()

    If CheckBoxD11.Value = True Then
        CheckBoxD11.Value = False
        Worksheets("Dynamic_Parking_Sheet").Range("D8").Interior.ColorIndex = 2

        CheckBoxD12.Value = True
        Worksheets("Dynamic_Parking_Sheet").Range("B9:E9").Interior.ColorIndex = 20
    End If

    TextBox1_Change
    TextBox2_Change

    If CheckBoxD12.Value = True Then
        Worksheets("Dynamic_Parking_Sheet").Range("B8:E8").Interior.Color = RGB(221, 221, 221)

        Worksheets("Dynamic_Parking_Sheet").Range("D9").Interior.ColorIndex = 4
    Else
        Worksheets("Dynamic_Parking_Sheet").Range("B8:E8").Interior.ColorIndex = 2

        Worksheets("Dynamic_Parking_Sheet").Range("D9").Interior.ColorIndex = 20
    End If

End Sub

我尝试过使用公共标志,但问题仍然存在。

有什么建议吗?

谢谢你, 〜申

1 个答案:

答案 0 :(得分:2)

如果您希望复选框相互取消选中,请尝试将代码简化为以下内容:

CheckBoxD12.Value = Not CheckBoxD11.value

它会很好用,应该没有循环。 或类似的事情,变得简单:

Private Sub chb_A_Click()
    If chb_A Then chb_B = False
End Sub

Private Sub chb_B_Click()
    If chb_B Then chb_A = False
End Sub

这里的想法是它只检查被检查以允许取消选中两个复选框的选项。