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

几个月来我一直在想这个问题,经过这么多的研究,这个问题还没有解决。 我正在使用Excelcheckbox,并试图使系统万无一失,而“如果A和B不能一起出现,如果A被点击,并且你点击B,那么macros就不会为你点击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 

..和第二个子:

 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 

我尝试了一些公共标志,但问题依然存在。

有什么build议?

谢谢,〜Deut

当你想checkbox相互取消选中时,试着简化你的代码,如下所示:

 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 

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