2017-01-12 3 views
0

У меня была эта проблема в течение нескольких месяцев, и она остается нерешенной после стольких исследований. Я работаю с Excel Checkboxes и пытаюсь сделать систему безупречной, тогда как «если A & B не может произойти вместе, если A щелкнут и вы нажмете B, тогда макрос отключит A для вас».VBA: предотвращение события _Click от запуска изменения значения

Однако этот вопрос я бегу в том, что это начинается (как показано в моем коде ниже) бесконечный цикл,

Первый Суб:

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 

Я попытался немного поработать с общественными флагами, но проблема сохранилась.

Любые советы?

Спасибо, ~ Втор

+2

Почему бы вам не попробовать использовать переключатель вместо флажка? – Minh

+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 

Идея заключается в том, что он проверяет только проверяется, чтобы предоставлять возможность для обоих флажков быть снят.

+1

Я пробовал первый подход и, похоже, отлично работает; Мне все равно нужно обновить весь код. Ты восхитителен! – Deuterium

Смежные вопросы