2016-05-19 10 views
0

私は現在、3つのコンボボックス(comboBox2、comboBox3、comboBox4)を持っています。 ComboBox2.ListFillRangeおよびComboBox3.ListFillRangeは、現在、名前付き範囲にリンクされています。 ComboBox2とComboBox3で選択された内容に応じて、ListFillRangeはComboBox4とは異なります。つまり、別の名前の範囲を調べます。以前の2つのComboBoxの値に基づいて、ComboBoxのListFillRangeを動的に選択していますか?

 Private Sub ComboBox3_Change() 

     Application.EnableEvents = True 

     If ComboBox2.Value = "Internal" And ComboBox3.Value = "Breach" Then 
      ComboBox4.ListFillRange = "=Internal_Breach" 
     ElseIf ComboBox2.Value = "Internal" And ComboBox3.Value = "Error" Then 
      ComboBox4.ListFillRange = "=Internal_Error" 
     ElseIf ComboBox2.Value = "External" And ComboBox3.Value = "Breach" Then 
      ComboBox4.ListFillRange = "=External_Breach" 
     ElseIf ComboBox2.Value = "External" And ComboBox3.Value = "Error" Then 
      ComboBox4.ListFillRange = "=External_Error" 
     Else: ComboBox2.Value = "External" And ComboBox3.Value = "Error" 
      ComboBox4.ListFillRange = "=External_Error" 
     End If 

     End Sub 

私はComboBox3ためComboBox2と「違反」のための「内部」を選択すると、私はComboBox4のために必要なListFillRangeを取得します。しかし、ComboBox2の "External"を選択し、ComboBox3を "Breach"として残しておけば、ComboBox4の "External" - "breach"コンビネーションで期待されるListFillRangeが得られないので、これを取得するために "Breach"私はそれを自動的に更新する方法を知っている誰かが私は1つを選択し、もう一方を残す?

答えて

0

ComboBox3が変更された場合にだけ発生するComboBox3_Change()イベントハンドラがあるためです。

:あなたは subを追加することができ

は、さらにあなたがに問題があると思います

あなたはどちらかのイベントハンドラによって呼び出される同じ仕事そう

を行う必要がありますComboBox2_Change()イベントハンドラをお尻なければなりません

Else: ComboBox2.Value = "External" And ComboBox3.Value = "Error" 
      ComboBox4.ListFillRange = "=External_Error" 
End If 

それはにつながると思いますので、:

Else 
     ComboBox2.Value = "External" And ComboBox3.Value = "Error" 
     ComboBox4.ListFillRange = "=External_Error" 
End If 
まで短縮することができ
Option Explicit 

Private Sub ComboBox2_Change() 
    Application.EnableEvents = True 
    Call CheckComboBoxes 
End Sub 

Private Sub ComboBox3_Change() 
    Application.EnableEvents = True 
    Call CheckComboBoxes 
End Sub 

Sub CheckComboBoxes() 
    If ComboBox2.Value = "Internal" And ComboBox3.Value = "Breach" Then 
     ComboBox4.ListFillRange = "=Internal_Breach" 
    ElseIf ComboBox2.Value = "Internal" And ComboBox3.Value = "Error" Then 
     ComboBox4.ListFillRange = "=Internal_Error" 
    ElseIf ComboBox2.Value = "External" And ComboBox3.Value = "Breach" Then 
     ComboBox4.ListFillRange = "=External_Breach" 
    ElseIf ComboBox2.Value = "External" And ComboBox3.Value = "Error" Then 
     ComboBox4.ListFillRange = "=External_Error" 
    ElseIf ComboBox2.Value = "External" And ComboBox3.Value = "Error" Then 
     ComboBox4.ListFillRange = "=External_Error" 
    End If 
End Sub 

Option Explicit 

Private Sub ComboBox2_Change() 
    Application.EnableEvents = True 
    Call CheckComboBoxes 
End Sub 

Private Sub ComboBox3_Change() 
    Application.EnableEvents = True 
    Call CheckComboBoxes 
End Sub 

Sub CheckComboBoxes() 
    ComboBox4.ListFillRange = ComboBox2.Value & "_" & ComboBox3.Value 
End Sub 
ワークシートのコードウィンドウで、コード上で何をすることができ、すべてのための

ComboBox2.Value = "External" And ComboBox3.Value = "Error" 

:行でエラーにので、

+0

@maracujaあなたはそれを通過しましたか? – user3598756

関連する問題