PDA

Vollständige Version anzeigen : 4 Comboboxen in Abhängigheiten


Franz00
30.08.2017, 12:39
Hallo zusammen,

ich habe einen Code der in 4 Comboboxen mein Daten von Tabellenblatt anzeigt. Soweit funktioniert der Code, nur wenn in Spalte A (Combi 1) es gleiche Einträge gibt und in Spalte C auch gleiche Einträge stehen, dann wird der Filter über Spalte B (Auswahl Combi 2) nicht berücksichtigt. Es wird dann nach Auswahl von Combi 3 der falsche Eintrag in Combi 4 eingefügt. Es sollte so ein, das die Abhängigkeiten der Comboboxen nacheinander von 1 bis 4 sein sollten.

Danke. Gruß Franz

Hat jemand eine Idee wo der Fehler sein könnte (siehe Code)

Const Startzeile As Long = 2


'Bei Änderung wenn sich ComboBox1 verändert -> ComboBox2 und 3 neu füllen

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox2.Clear
ComboBox3.Clear
ComboBox4.Clear

If ComboBox1.ListIndex = -1 Then Exit Sub
Call CombiTabelleSpalte(Tabelle1, 2, ComboBox2, 1, ComboBox1.Text)
If ComboBox2.ListCount >= 1 Then ComboBox2.ListIndex = 0
End Sub

'Bei Änderung ComboBox2 verändert -> ComboBox3 neu füllen

Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox3.Clear
ComboBox4.Clear

If ComboBox2.ListIndex = -1 Then Exit Sub
Call CombiTabelleSpalte(Tabelle1, 3, ComboBox3, 1, ComboBox1.Text, 2, ComboBox2.Text)
If ComboBox3.ListCount >= 1 Then ComboBox3.ListIndex = 0

End Sub


'Bei Änderung ComboBox3 verändert -> ComboBox4 neu füllen

Private Sub ComboBox3_Change()
ComboBox4.Clear
If ComboBox3.ListIndex = -1 Then Exit Sub
'Original Code
Call CombiTabelleSpalte(Tabelle1, 4, ComboBox4, 1, ComboBox1.Text, 3, ComboBox3.Text)
If ComboBox4.ListCount >= 1 Then ComboBox4.ListIndex = 0

End Sub

'ComboxBox wird von Spalte A gefüllt
Private Sub FillComboBox1()
Call CombiTabelleSpalte(Tabelle1, 1, ComboBox1)
If ComboBox1.ListCount >= 1 Then ComboBox1.ListIndex = 0
End Sub





Private Sub CombiTabelleSpalte(ByRef oSheet As Object, _
ByVal lColumn As Long, ByRef oComboBox As Object, _
Optional ByVal SpaltenBedingung1 As Long = 0, Optional ByVal sBedingung1 As String = "", _
Optional ByVal SpaltenBedingung2 As Long = 0, Optional ByVal sBedingung2 As String = "", _
Optional ByVal SpaltenBedingung3 As Long = 0, Optional ByVal sBedingung3 As String = "")
Dim z As Long
Dim zMax As Long
Dim bFlag As Boolean

oComboBox.Clear
zMax = oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count - 1

For z = Startzeile To zMax
If Trim(CStr(oSheet.Cells(z, lColumn).Value)) <> "" Then
bFlag = True

If SpaltenBedingung1 <> 0 Then
If LCase(Trim(CStr(oSheet.Cells(z, SpaltenBedingung1)))) <> LCase(Trim(sBedingung1)) Then
bFlag = False
End If
End If

If SpaltenBedingung2 <> 0 Then
If LCase(Trim(CStr(oSheet.Cells(z, SpaltenBedingung2)))) <> LCase(Trim(sBedingung2)) Then
bFlag = False
End If
End If

If SpaltenBedingung3 <> 0 Then
If LCase(Trim(CStr(oSheet.Cells(z, SpaltenBedingung3)))) <> LCase(Trim(sBedingung3)) Then
bFlag = False
End If
End If


If bFlag = True Then
Call SpaltenDuplikate(oComboBox, oSheet.Cells(z, lColumn).Value)
End If
End If
Next z
End Sub


Private Sub SpaltenDuplikate(ByRef oComboBox As Object, ByVal sAddText As String)
Dim i As Long
Dim bFlag As Boolean

If oComboBox.ListCount = 0 Then
oComboBox.AddItem sAddText
Else
bFlag = False

For i = 0 To oComboBox.ListCount - 1
If LCase(Trim(CStr(oComboBox.List(i)))) = LCase(Trim(CStr(sAddText))) Then
bFlag = True
Exit For
End If
Next i

If bFlag = False Then
oComboBox.AddItem sAddText
End If
End If
End Sub