2017-01-12 13 views
0

この問題は何ヶ月も念頭に置いてありました。私はExcelチェックボックスを使って作業していますが、 "A & Bが一緒に発生することはありませんが、AをクリックしてBをクリックするとマクロがAを解除します。VBA:値変更時に_Clickイベントがトリガーされないようにする

しかし、私はに実行している問題は、無限ループ(以下の私のコードのように)、これが開始されることである

最初の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 

...と第2のサブ:

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

関連する問題