Combobox in Abhängigkeit
Hallo @All,
hab viel probiert aber ich komme mit dem Code nicht klar.
Ich bekomme die beiden Comboboxen nicht in Abhängigkeit.
Habe bestimmt schon 8 vorlagen gefunden, schaffe es aber nicht das auf meine UserForm umzumünzen!
Die Box befüllen krieg ich hin, aber das mit der Abhängigkeit nicht!
Kann sich das mal jemand ansehen und mir das in den VBA basteln?
Hier die
DateiEs soll eine Abhängigkeit von Unterricht zu Lehrer entstehen.
Daten dafür sind in Tabelle Lehrer.
Ich bin geschafft, und bekommen es absolut nicht auf die Reihe.
Danke für eure Hilfe
Benjamin
Antwort schreiben
Antwort 1 von Beverly vom 07.05.2022, 14:47 Options
Hi Benjamin,
damit die Lehrer nicht doppelt eingetragen werden, schreibe diesen Code ins Activate Ereignis des UserForms:
Private Sub UserForm_Activate()
Dim loZaehler As Long
Dim varBereich As Variant
Dim objWerte As Object
Set objWerte = CreateObject("Scripting.Dictionary")
With Worksheets("Lehrer")
varBereich = .Range("B2", .Range("B2").End(xlDown))
End With
For loZaehler = LBound(varBereich) To UBound(varBereich)
objWerte(varBereich(loZaehler, 1)) = 0
Next
ComboBox1.List = objWerte.keys
Set objWerte = Nothing
End Sub
Lösche weiterhin die RowSource in beiden ComboBoxen und schreibe den folgenden Code ins Change Ereignis der ComboBox1:
Private Sub ComboBox1_Change()
Dim loZeile As Long
loZeile = 2
With Worksheets("Lehrer")
ComboBox2.Clear
Do
If .Cells(loZeile, 2) = ComboBox1 Then ComboBox2.AddItem .Cells(loZeile, 1)
loZeile = loZeile + 1
Loop While .Cells(loZeile, 1) <> ""
End With
ComboBox2.ListIndex = 0
End Sub
Damit werden in Abhängigkeit von der Auswahl des Lehrers in der ComboBox1 die Fächer in ComboBox2 "gefiltert".
Bis später,
Karin
Antwort 2 von BenjaminM vom 10.05.2022, 09:22 Options
Hallo Karin,
Danke für deine Antwort.
Hab das mal eingesetz in meinen Code, doch mir ist jetzt aufgefallen das ich die Combos vertauscht habe.
Es soll erst der Unterricht abgefragt werden und dann der Lehrer dazu wählbar sein!
Da sich die Schüler für einen Unterricht anmelden, und dann erst der Lehrer dazu ausgewählt wird.
Hab das jetzt umgedreht, aber dann lauft es auf einen Fehler.
Könntest du noch mal schauen was ich da falsch mache?
Der Fehler wird angezeigt in dem Combobox1_Change Ereignis, letzte Zeile
"ComboBox2.ListIndex = 0"
ich muss doch den vorhandenen Code ersetzen, oder!?
Hier noch mal die
Datei.
Und was für eien Code muss ich nutzen um das dann aus den Combos in die Tabelle "Schuelereintritt" zu übertragen?
Danke für deine Hilfe,
mfG Benjamin
Antwort 3 von Beverly vom 10.05.2022, 10:05 Options
Hi Benjamin,
da dein Tabellenaufbau jetzt ein völlig anderer ist, geht das mit dem bisherigen Code nicht mehr.
Private Sub UserForm_Activate()
Dim loLetzte As Long
With Worksheets("Lehrer")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
ComboBox1.RowSource = "Lehrer!" & .Range(.Cells(1, 1), .Cells(loLetzte, 1)).Address
End With
End Sub
Private Sub ComboBox1_Change()
Dim loZaehler As Long
Dim varBereich As Variant
Dim objWerte As Object
Dim inZeile As Integer
inZeile = ComboBox1.ListIndex + 1
Set objWerte = CreateObject("Scripting.Dictionary")
With Worksheets("Lehrer")
varBereich = Application.Transpose(.Range("B" & inZeile & ":" & .Range("B" & inZeile).End(xlToRight).Address))
End With
For loZaehler = LBound(varBereich) To UBound(varBereich)
If varBereich(loZaehler, 1) <> "" Then objWerte(varBereich(loZaehler, 1)) = 0
Next
ComboBox2.List = objWerte.keys
If ComboBox2.ListCount > 0 Then ComboBox2.ListIndex = 0
Set objWerte = Nothing
End Sub
Das Übertragen der Daten machst du genau so wie mit den TextBoxen, nur dass du statt TextBox schreibst ComboBox1 bzw. ComboBox2 und die betreffende Spaltennummer angibst, ich welche der Eintrag erfolgen soll.
Bis später,
Karin
Antwort 4 von BenjaminM vom 10.05.2022, 10:16 Options
Super, danke.
jedoch werden nun leider die Lehrer nicht mehr gefiltert!
Irgendwie stimmt die Zuordnung nun nicht mehr.
Könntest du noch mal schauen?Oder muss ich die Quelle neu Aufstellen?
MfG Benjamin
Antwort 5 von BenjaminM vom 10.05.2022, 10:53 Options
Hallo Karin,
mit den Combos übertragen hab ich auch hinbekommen, (fehler war ich hab im Code CombiBox1 geschrieben ;-))
Nuun taucht aber noch etwas auf!
Der Übertrag funtz, aber trotzdem kommt beim übertrage ein Laufzeitfehler im Code!
Private Sub ComboBox1_Change()
Dim loZaehler As Long
Dim varBereich As Variant
Dim objWerte As Object
Dim inZeile As Integer
inZeile = ComboBox1.ListIndex + 1
Set objWerte = CreateObject("Scripting.Dictionary")
With Worksheets("Lehrer")
varBereich = Application.Transpose(.Range("B" & inZeile & ":" & .Range("B" & inZeile).End(xlToRight).Address))
End With
For loZaehler = LBound(varBereich) To UBound(varBereich)
If varBereich(loZaehler, 1) <> "" Then objWerte(varBereich(loZaehler, 1)) = 0
Next
ComboBox2.List = objWerte.keys
If ComboBox2.ListCount > 0 Then ComboBox2.ListIndex = 0
Set objWerte = Nothing
die Fett gedruckte Zeile wird als Fehler angezeigt.
Was kann das den noch sein?
Sorry für die Vielen Fragen, aber als Newbie ist das echt nicht so einfach!
Danke dir & MfG Benjamin
Antwort 6 von Beverly vom 10.05.2022, 12:11 Options
Hi Benjamin,
da müsstest du deine aktuelle Mappe mit dem übernommenen Code noch mal hochladen - in deiner ursprünglichen Mappe, in der ich den Code getestet habe, kommt dieser Fehler nicht.
Bis später,
Karin
Antwort 7 von BenjaminM vom 10.05.2022, 13:41 Options
Hallo Karin,
hier noch mal die
Datei,
mit dem Fehler aus AW5.
MfG Benjamin
Antwort 8 von Beverly vom 10.05.2022, 14:38 Options
Hi Benjamin,
ich habe deine Mappe jetzt heruntergeladen - bei mir kommt dieser Fehler nicht. Welche Excelversion verwendest du?
Bis später,
Karin
Antwort 9 von BenjaminM vom 10.05.2022, 14:48 Options
Hallo Karin,
ich hab excel 2007, allerdings im Kompatibilitäts Modus.
Kann das damit zusammenhängen?
Wäre schön wenn das mit Version 97 auch funtz, den das ist die Version auf der es später auch laufen soll! (bis dann irgendwann das neue drauf kommt)
Gruß Benjamin
Antwort 10 von Beverly vom 10.05.2022, 15:37 Options
Hi Benjamin,
ich habe die Mappe jetzt sowohl in Excel2007 (Kompatibilitätsmodus), Excel2002 und Excel97 getestet - es kommt keine Fehlermeldung. Was sagt denn der Debugger bei dir genau und was wird als Inhalt der Variablen loZeile angegeben, wenn du im VBA-Editor bei angehaltenem Code (ich meine wenn der Code durch den Fehler anhält) darauf gehst?
Bis später,
Karin
Antwort 11 von Beverly vom 10.05.2022, 15:46 Options
Korrektur: ich meinte Variable inZeile nicht loZeile
Bis später,
Karin
Antwort 12 von BenjaminM vom 10.05.2022, 17:05 Options
Hallo Karin,
hab die Datei noch mal neu gestartet und nu gehts! weiß auch nicht was das war!
Vielen Dank!
Benjamin
Antwort 13 von BenjaminM vom 25.05.2022, 14:32 Options
Hallo,
ich hab das Problem nun wieder, wie in AW5!
Kein Plan was das sein könnte.
die Variable ist als "inZeile" und nicht "loZeile" funktioniert aber trotzdem nicht.
Kann mir da einer weiterhelfen?
MfG Benjamin