4k Aufrufe
Gefragt in Tabellenkalkulation von benjaminm Mitglied (631 Punkte)
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 Datei

Es 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

13 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von benjaminm Mitglied (631 Punkte)
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
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von benjaminm Mitglied (631 Punkte)
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
0 Punkte
Beantwortet von benjaminm Mitglied (631 Punkte)
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
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von benjaminm Mitglied (631 Punkte)
Hallo Karin,

hier noch mal die Datei,
mit dem Fehler aus AW5.

MfG Benjamin
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Benjamin,

ich habe deine Mappe jetzt heruntergeladen - bei mir kommt dieser Fehler nicht. Welche Excelversion verwendest du?

Bis später,
Karin
0 Punkte
Beantwortet von benjaminm Mitglied (631 Punkte)
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
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
...