Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
VBA userform -dropdown abhängig von dropdown
dropdown
Hallo zusammen
ich habe irgendwo im Internet (leider weises ich nicht mehr wo) eine Beispiel-Arbeitsmappe gefunden, die erklärt, wie man zwei Dropdownlisten in Abhängigkeit voneinander aufbaut.
Das klappt auch super.
Nun möchte ich aber das ganze noch so erweitern, dass aus der Tabelle (Spieler) jeder im Dropdown 1 und Dropdown2 ausgewählten Mannschaft min 2 (max 3) Spieler zugeordnet werden können.
https://www.herber.de/bbs/user/80755.xls
Könnt ihr mir da weiter helfen?
Vielen Dank und viele Grüsse
Nimzo
Combobox Spieler ...
27.06.2012 07:24:28
Matthias
Hallo
Ich vermute, das Du es so meinst:
Userbild
Die editierte Datei:
https://www.herber.de/bbs/user/80758.xls
Alternativ könntest Du nach Auswahl des ersten Spielers aus Combobox3,
diesen Spieler aus Combobox4 und Combobox5 entfernen.
Dazu kannst Du RemoveItem benutzen.
Userbild
perfekt, danke! aber frage zu "removeitem"
27.06.2012 08:59:34
Nimzo
Hallo Matthias
vielen Dank schon mal für Deine Hilfe. Das ist genau das was ich wollte.
Allerdings hast Du mich jetzt auf "RemoveItem" neugierig gemacht.
Kannst Du mir noch erklären wo ich das wie einbauen muss?
Vielen Dank und viele Grüsse
Nimzo
Anzeige
ob das in Frage kommt, weiß ich nicht ...
27.06.2012 09:23:39
Matthias
Hallo
Mit RemoveItem kannst Du Einträge aus einer Liste entfernen.
Dazu sollte man sich aber ein wenig damit befasst haben, bevor man das benutzt.
Bsp: einfach mal als Code für Deine Combobox3
Private Sub ComboBox3_Change()
Dim MyLIDX
MyLIDX = ComboBox3.ListIndex
If MyLIDX > -1 Then
UserForm1.ComboBox4.RemoveItem MyLIDX
End If
End Sub
Da die Comboboxen 3 / 4 / 5 alle die gleichen Einträge haben,
kannst Du mit RemoveItem den ListIndex auswerten.
Dieser wird einfach aus der Combobox4 entfernt.
Wählst Du also in Combobox3 den 2.Eintrag wird genau dieser IndexEintrag in der Combobox4 entfernt.
Ob das in Deinem Fall sinnvoll ist, weiß ich nicht.
Besser wäre immer im Beitrag gleich zu schreiben was man sich genau als Ergebnis vorstellt.
Du kannst Dir hier mal ein Beispiel ansehen:
https://www.herber.de/forum/archiv/1228to1232/t1228613.htm
Gruß Matthias
Anzeige
Per VBA werte kopieren - nicht die Formel
27.06.2012 09:41:45
Nimzo
Hallo Matthias
auf meinem HomePC mit OFFICE 2010 ging alles problemlos. Jetzt bin ich gerade mit dem Zug unterwegs und auf meinem Laptop (OFFICE 2007) funktioniert es nicht.
(noch die von Dir gemacht Version (also ohne die ComboBox3_Change sub)
Ich bekomme folgende Fehlermeldugn:
"Laufzeitfehler '457:
Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet"
Beim Debuggen wird aus nachfolgendem Code die Zeile : "col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi").Cells(iRow, 2)"
For iRow = 2 To ALetzte
If Not IsEmpty(Sheets("Mannschaftskombi").Cells(iRow, 2)) Then
If Sheets("Mannschaftskombi").Cells(iRow, 2) = ComboBox1.Value Then
col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi"). _
Cells(iRow, 2)'Diese Zeile wird beim Debugen angezeigt
ComboBox2.AddItem Sheets("Mannschaftskombi").Cells(iRow, 3)
End If
End If
Next iRow

Hier nochmals der gesamte Code:

Option Explicit
Private Sub UserForm_Activate()
' Das sind nur Spieldaten, hier kommt dein Quelltext zum Befüllen
' det ComboBox1 rein !!!
ComboBox1.List = Sheets("Mannschaftskombi").Range("A2:A11").Value
End Sub
Sub Sortieren()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox2
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub
Private Sub ComboBox1_Change()
' geschrieben von P@ulchen, angepasst von Klaus-Dieter
Dim col As New Collection, X&
Dim iRow As Long, ALetzte As Long
ComboBox2.Clear
ALetzte = IIf(IsEmpty(Sheets("Mannschaftskombi").Range("c65536")), Sheets("Mannschaftskombi" _
).Range("c65536").End(xlUp).Row, 65536)
On Error Resume Next
For iRow = 2 To ALetzte
If Not IsEmpty(Sheets("Mannschaftskombi").Cells(iRow, 2)) Then
If Sheets("Mannschaftskombi").Cells(iRow, 2) = ComboBox1.Value Then
col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi"). _
Cells(iRow, 2)
ComboBox2.AddItem Sheets("Mannschaftskombi").Cells(iRow, 3)
End If
End If
Next iRow
On Error GoTo 0
Call Sortieren
ComboBox2.ListIndex = 0
'Spieler holen für Combobox1
ComboBox3.Clear 'alte Einträge löschen
ComboBox4.Clear 'alte Einträge löschen
ComboBox5.Clear 'alte Einträge löschen
For X = 2 To 31
With Tabelle3 'CodeName der Tabelle("Spieler")
If .Cells(X, 1) = ComboBox1 Then
ComboBox3.AddItem .Cells(X, 2)
ComboBox4.AddItem .Cells(X, 2)
ComboBox5.AddItem .Cells(X, 2)
End If
End With
Next
End Sub
Private Sub ComboBox2_Change()
Dim X&
'Spieler holen für Combobox1
ComboBox6.Clear 'alte Einträge löschen
ComboBox7.Clear 'alte Einträge löschen
ComboBox8.Clear 'alte Einträge löschen
For X = 2 To 31
With Tabelle3 'CodeName der Tabelle("Spieler")
If .Cells(X, 1) = ComboBox2 Then
ComboBox6.AddItem .Cells(X, 2)
ComboBox7.AddItem .Cells(X, 2)
ComboBox8.AddItem .Cells(X, 2)
End If
End With
Next
End Sub
Könntest Du mir nochmals helfen?
Viele Grüsse
Nimzo
Anzeige
auf office 2010 gehts, auf office 2007 nicht
27.06.2012 09:42:21
Nimzo
Hallo Matthias
auf meinem HomePC mit OFFICE 2010 ging alles problemlos. Jetzt bin ich gerade mit dem Zug unterwegs und auf meinem Laptop (OFFICE 2007) funktioniert es nicht.
(noch die von Dir gemacht Version (also ohne die ComboBox3_Change sub)
Ich bekomme folgende Fehlermeldugn:
"Laufzeitfehler '457:
Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet"
Beim Debuggen wird aus nachfolgendem Code die Zeile : "col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi").Cells(iRow, 2)"
For iRow = 2 To ALetzte
If Not IsEmpty(Sheets("Mannschaftskombi").Cells(iRow, 2)) Then
If Sheets("Mannschaftskombi").Cells(iRow, 2) = ComboBox1.Value Then
col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi"). _
Cells(iRow, 2)'Diese Zeile wird beim Debugen angezeigt
ComboBox2.AddItem Sheets("Mannschaftskombi").Cells(iRow, 3)
End If
End If
Next iRow

Hier nochmals der gesamte Code:

Option Explicit
Private Sub UserForm_Activate()
' Das sind nur Spieldaten, hier kommt dein Quelltext zum Befüllen
' det ComboBox1 rein !!!
ComboBox1.List = Sheets("Mannschaftskombi").Range("A2:A11").Value
End Sub
Sub Sortieren()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox2
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub
Private Sub ComboBox1_Change()
' geschrieben von P@ulchen, angepasst von Klaus-Dieter
Dim col As New Collection, X&
Dim iRow As Long, ALetzte As Long
ComboBox2.Clear
ALetzte = IIf(IsEmpty(Sheets("Mannschaftskombi").Range("c65536")), Sheets("Mannschaftskombi" _
).Range("c65536").End(xlUp).Row, 65536)
On Error Resume Next
For iRow = 2 To ALetzte
If Not IsEmpty(Sheets("Mannschaftskombi").Cells(iRow, 2)) Then
If Sheets("Mannschaftskombi").Cells(iRow, 2) = ComboBox1.Value Then
col.Add Sheets("Mannschaftskombi").Cells(iRow, 2), Sheets("Mannschaftskombi"). _
Cells(iRow, 2)
ComboBox2.AddItem Sheets("Mannschaftskombi").Cells(iRow, 3)
End If
End If
Next iRow
On Error GoTo 0
Call Sortieren
ComboBox2.ListIndex = 0
'Spieler holen für Combobox1
ComboBox3.Clear 'alte Einträge löschen
ComboBox4.Clear 'alte Einträge löschen
ComboBox5.Clear 'alte Einträge löschen
For X = 2 To 31
With Tabelle3 'CodeName der Tabelle("Spieler")
If .Cells(X, 1) = ComboBox1 Then
ComboBox3.AddItem .Cells(X, 2)
ComboBox4.AddItem .Cells(X, 2)
ComboBox5.AddItem .Cells(X, 2)
End If
End With
Next
End Sub
Private Sub ComboBox2_Change()
Dim X&
'Spieler holen für Combobox1
ComboBox6.Clear 'alte Einträge löschen
ComboBox7.Clear 'alte Einträge löschen
ComboBox8.Clear 'alte Einträge löschen
For X = 2 To 31
With Tabelle3 'CodeName der Tabelle("Spieler")
If .Cells(X, 1) = ComboBox2 Then
ComboBox6.AddItem .Cells(X, 2)
ComboBox7.AddItem .Cells(X, 2)
ComboBox8.AddItem .Cells(X, 2)
End If
End With
Next
End Sub
Könntest Du mir nochmals helfen?
Viele Grüsse
Nimzo
Anzeige
mit xl2007 geht das auch ...
27.06.2012 10:18:49
Matthias
Hallo
Kann ich nicht nachvollziehen
Du siehst, ich benutze XL2007
Userbild
Bei Auswahl von Spieler(12) wird dieser nicht mehr in der nächsten Combobox angeboten
Der Code: ...
col.Add Sheets("Mannschaftskombi").Cells
...
ist nich von mir. Ich kann dazu auch nichts schreiben.
Gruß Matthias
Per VBA werte kopieren - nicht die Formel
27.06.2012 10:48:45
Nimzo
Gruss
Nimzo
sind wir noch im gleichen Beitrag ? Bahnhof owT
27.06.2012 10:58:30
Matthias
unsinnige überschrift... macht der passwortmang...
27.06.2012 11:20:54
Nimzo
Sorry :)
für mich ist das Thema erstmal geschlossen, vielen Dank.
Ich denke das mit dem Laufzeitfehler liegt an irgendeiner Einstellung in meinem Excel und da mit dem RemoveItem werde ich versuchen selbst hinzubekommen :)
Vielen Dank für Deine Hilfe!
Anzeige

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige