2016-05-19 2 views
0

Ich habe derzeit drei Kombinationsfelder (ComboBox2, ComboBox3, ComboBox4). ComboBox2.ListFillRange und ComboBox3.ListFillRange sind derzeit mit benannten Bereichen verknüpft. Abhängig davon, was in ComboBox2 und ComboBox3 gewählt wird, wird der ListFillRange für ComboBox4 unterschiedlich sein, d. H. Er sieht sich einen anderen Namensbereich an.Dynamisch ListFillRange für ComboBox basierend auf zwei vorherigen ComboBoxes Werte auswählen?

 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 

Als ich "Intern" für ComboBox2 und "Breach" wähle für ComboBox3 ich die erforderlichen ListFillRange für ComboBox4 bekommen. Aber wenn ich dann "External" für ComboBox2 wähle und ComboBox3 als "Breach" belasse, bekomme ich nicht den erwarteten ListFillRange in ComboBox4 für die "External" - "Breech" -Kombination, ich muss "Breach" erneut auswählen, um das zu bekommen. Weiß jemand, wie ich es automatisch aktualisieren lassen kann, wenn ich eins neu auswähle und das andere lasse?

Antwort

0

es ist, weil Sie nur ComboBox3_Change() Event-Handler haben, der nur ausgelöst wird, wenn ComboBox3 geändert wird.

müssen Sie eine ComboBox2_Change() Ereignishandler Esel, die die gleiche Arbeit

zu tun hat

so könnte man einen sub hinzufügen, indem Sie entweder Event-Handler

außerdem aufgerufen werden Sie Probleme haben würde:

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

da würde es nach sich ziehen:

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

und somit zu einem Fehler bei der Zeile:

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

für alle was könnte über Ihren Code in dem Arbeitsblatt Codebereich sein:

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 

, die bis zu verkürzt werden konnte:

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 
+0

@maracuja hast du es geschafft? – user3598756