Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Wenn Dann Bedingung in Combobox
25.05.2022 15:37:07
Christine
Hallo zusammen,
für ein Modul an der Uni muss ich gemeinsam mit einer Gruppe ein VBA Programm schreiben. Die Aufgabe besteht darin einen Spieler für das Brettspiel "Auf Achse" zu programmieren. Bei dem Spiel geht es darum, dass Transportaufträge bearbeitet werden müssen. Diese Aufträge wollen wir mittels eines Drop Down Menüs auswählen. Die entsprechende User Form mit Combobox habe ich dafür schon erstellt. Folgender Code ist demnach schon fertiggestellt:
'Auswahl der gezogenen Handuaftraege ueber ein Drop Down Menue. Sobald ein Auftrag ausgewaehlt wurde, soll dieser in der zweiten bzw. dritten Auswahl nicht mehr verfuegbar sein.

Private Sub UserForm_Initialize()
UserForm1_Handauftraege.Auftrag_1.RowSource = "Transportauftraege!A2:A55"
UserForm1_Handauftraege.Auftrag_2.RowSource = "Transportauftraege!A2:A55"
UserForm1_Handauftraege.Auftrag_3.RowSource = "Transportauftraege!A2:A55"
End Sub
'Uebertragung der Handauftraege in die vorgesehenen Zellen im Arbeitsblatt "Spielfeld" sowie Schliessen der UserForm beim Klicken des Buttons "Uebernehmen"

Private Sub CommandButton1_Click()
Worksheets("Spielfeld").Cells(18, 2).Value = UserForm1_Handauftraege.Auftrag_1.Value
Worksheets("Spielfeld").Cells(19, 2).Value = UserForm1_Handauftraege.Auftrag_2.Value
Worksheets("Spielfeld").Cells(20, 2).Value = UserForm1_Handauftraege.Auftrag_3.Value
Unload UserForm1_Handauftraege
End Sub
Die erforderlichen Informationen der Transportaufträge werden aus einem anderen Arbeitsblatt (Transportauftraege) gezogen. Da nacheinander drei Aufträge ausgewählt werden müssen, möchte ich gerne die Funktion einbauen, dass sobald ein erster Auftrag ausgewählt wurde, dieser im zweiten Drop Down bzw. Combobox nicht mehr auszuwählen ist. Geht das mit einer Wenn Dann Bedingung? Ich habe bisher leider keine Lösung gefunden und bin für jede Hilfe sehr dankbar!!

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Dann Bedingung in Combobox
25.05.2022 16:00:10
Daniel
Hi
wenn du einer Combobox Inhalte über RowSource zuweist, können diese Inhalte dann nur noch über Änderungen in der Tabelle verändert werden.
wenn du direkt in der Combobox ändern willst, musst du die Combobox über .AddItem befüllen oder die Inhalte als Array in die List-Eigenschaft schreiben.
ich würde hier das Befüllen der Combobox erst im DropButton_Click-Event machen (also wenn der Anwender in die Combobox reingeht), dann kannst du nämlich auch gleich schauen, was in den andern Comboboxen schon ausgewählt wurde und das dann rauschmeißen:
also im DropButton_Click-Makro oder im ENTER-Makro dann folgendes:

With Auftrag_1
.List = Sheets("Transportauftraege").Range("A2:A55").value
for i = .ListCount - 1 to 0 step -1
if .List(i) = Auftrag_2.value or .list(i) = Auftrag_3.value then .RemoveItem i
next
End with
das gleiche dann für die beiden anderne Comboboxen.
Gruß Daniel
Anzeige
Alternative mit MultiSelect Listbox
25.05.2022 16:19:17
ChrisL
Hi Christine
Die Frage zur ComboBox hat dir bereits Daniel beantwortet. Übrigens MatchRequired=True nicht vergessen.
Selber würde ich eher auf eine MultiSelect Lösung tendieren. Finde ich bei der Anzahl Einträge recht übersichtlich und man kann die Auswahl nachträglich auch leicht wieder korrigieren/löschen.
https://www.herber.de/bbs/user/153274.xlsm
cu
Chris

Private Sub CommandButton1_Click()
Dim arListe(1 To 3) As Variant
Dim iZaehler As Integer
Dim i As Integer
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
iZaehler = iZaehler + 1
If iZaehler > 3 Then Exit For
arListe(iZaehler) = .List(i)
End If
Next i
End With
If iZaehler  3 Then
MsgBox "Es müssen 3 Einträge ausgewählt werden.", vbCritical
Else
Worksheets("Transportauftraege").Range("B18:B20") = Application.Transpose(arListe)
Unload Me
End If
End Sub

Private Sub CommandButton2_Click()
Worksheets("Transportauftraege").Range("B18:B20").ClearContents
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 0 To ListBox1.ListCount - 1
If WorksheetFunction.CountIf(Worksheets("Transportauftraege").Range("B18:B20"), ListBox1.List(i)) Then _
ListBox1.Selected(i) = True
Next i
End Sub

Anzeige

126 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige