November 25, 2020, 08:40:19

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Abhängige Comboboxen

Begonnen von Pergus, November 09, 2016, 16:01:09

⏪ vorheriges - nächstes ⏩

Pergus

Hallo liebe Excel-Freunde,

ich stehe hier vor einem Problem, das mich verzweifeln lässt:

In einer Userform verwalte ich Kurse, wo jeweils max. 10 Personen teilnehmen können.

Nun möchte ich in der "Listbox1" (wo die Kurse aufgelistet sind, Datenherkunft ist die Tabelle "Kurse", Spalte "B" [Kursbezeichnung]) auf einen Kurs klicken können und folglich in den mehrspaltigen Comboboxen mit den Bezeichnungen "Combobox1" bis "Combobox10" (wo die Teilnehmer ausgewählt werden können, Datenherkunft ist die Tabelle "Kunden", Spalte "B" [Vorname], Spalte "C" [Nachname] und Spalte "G" [Wohnort]).

Sobald in einer Combobox ein Teilnehmer ausgewählt wird, darf in den anderen Comboboxen der bereits ausgewählte Teilnehmer nicht mehr vorkommen, um Buchungsfehler zu vermeiden.
Hier ein Beispiel:

Teilnehmerliste in Tabelle "Kunden", Spalten "B / C / G":

VORNAME       NACHNAME        WOHNORT
Vorname_1   / Nachname_1   / Wohnort_1
Vorname_2   / Nachname_2   / Wohnort_2
Vorname_3   / Nachname_3   / Wohnort_3
Vorname_4   / Nachname_4   / Wohnort_4
Vorname_5   / Nachname_5   / Wohnort_5
Vorname_6   / Nachname_6   / Wohnort_6
Vorname_7   / Nachname_7   / Wohnort_7
Vorname_8   / Nachname_8   / Wohnort_8
Vorname_9   / Nachname_9   / Wohnort_9
Vorname_10 / Nachname_10 / Wohnort_10

Wird nun z.B.
- in der Combobox1 der Teilnehmer_3 ausgewählt, so sollen in der Combobox2 alle Teilnehmer aufgelistet werden AUSSER Teilnehmer_3.
- Wählt man jetzt noch in der Combobox2 den Teilnehmer_5 aus, so sollen in der Combobox3 alle Teilnehmer aufgelistet werden AUSSER Teilnehmer_3 und Teilnehmer_5, da diese ja bereits teilnehmen...
- usw.

Kann mir da jemand dabei helfen?

Danke im Voraus für Eure Mühe!

Lg, Gustav
Win7, Office Professional 2010

Beaker s.a.

Hallo Gustav,
Zeige uns doch bitte ein Bild des Beziehungsfensters (alle Tabellen mit allen Feldern
müssen zu sehen sein).
Da stimmt höchstwahrscheinlich dein Datenmodell noch nicht.
Normal braucht's dazu nur ein einziges Kombi, das sich automatisch "verkürzt".
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Pergus

Hy Beaker s.a.,

mein Problem habe ich in Excel, nicht in Access...  ;)
Aber danke trotzdem für'a Engagement!  8)

Lg, Gustav
Win7, Office Professional 2010

Beaker s.a.

Sorry, war bei mir nicht angekommen.
Bei Excel kann ich allerdings nicht helfen.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Pergus

Hallo liebe Excel-Freaks  ;)

Na, wer sagt's denn, auch ein blindes Huhn findet mal ein Korn!  ;D

Hab endlich die Lösung nach tagelangem herumtüftlen, und zwar so...!  8)

Private Sub UserForm_Initialize()
Dim i As Long
Dim j As Integer
Dim k As Integer
Dim Wert1(10) As String
Dim Werte(10) As String
Worksheets("Kunden").Activate
letztezeileKunde = Worksheets("Kunden").Cells(Rows.Count, 2).End(xlUp).Row
letztezeileKurs = Worksheets("Kurse").Cells(Rows.Count, 2).End(xlUp).Row

For i = 2 To letztezeileKurs
    If Worksheets("Kurse").Cells(i, 2) > 0 Then UserForm1.ListBox1.AddItem Worksheets("Kurse").Cells(i, 2)
Next i
    Call SortListBox
    Call KursAuswählen
End Sub


Das Change-Ereignis der Comboboxen 1 - 9 rufen das Makro "Sichtbar" auf, also... Call Sichtbar

Das Makro "Sichtbar" im Modul "Modul1":
Sub Sichtbar()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Wert1(10) As String
Dim Werte(10) As String
Dim vorhku(10) As Variant
Dim flag As Integer

For i = 1 To 10
    With UserForm1
        If .Controls("Combobox" & i).Visible = False Then Exit Sub
        If .Controls("Combobox" & i).Value <> "" Then
        If 1 = 10 Then Exit Sub
           .Controls("Label" & i + 1).Visible = True
           .Controls("Combobox" & i + 1).Visible = True
        End If
    End With
Next i
End Sub


Das Change-Ereignis der Combobox 10 (CommandButton 1 = "Ok" zur Bestätigung) hingegen setzt den Fokus auf den "Ok"-Bestätigungs-Button UserForm1.CommandButton1.SetFocus

Das Enter-Ereignis der Comboboxen 2 - 10 rufen das Makro "ComboBoxenFuellenGefiltert" auf, also...  Call ComboBoxenFuellenGefiltert

Das Makro "ComboBoxenFuellenGefiltert" im Modul 1 (womit ich meine Probleme hatte  ;D ):
Sub ComboBoxenFuellenGefiltert()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim vorhku(10) As Variant
Dim flag As Integer

For i = 1 To 10
    If UserForm1.Controls("Combobox" & i).Value = "" Then Exit For
    vorhku(i) = UserForm1.Controls("Combobox" & i).Value
Next i
For j = 1 To letztezeileKunde - 1
flag = 0
    For k = 1 To i - 1
        If vorhku(k) = Worksheets("Kunden").Cells(j + 1, 1) Then flag = 1: Exit For
    Next k
    With UserForm1.Controls("Combobox" & i)
        .ColumnCount = 4
        If flag = 0 Then
        .AddItem
        .List(.ListCount - 1, 0) = Worksheets("Kunden").Cells(j + 1, 1)
        .List(.ListCount - 1, 1) = Worksheets("Kunden").Cells(j + 1, 2)
        .List(.ListCount - 1, 2) = Worksheets("Kunden").Cells(j + 1, 3)
        .List(.ListCount - 1, 3) = Worksheets("Kunden").Cells(j + 1, 7)
         End If
    End With
Next j
End Sub


Das Makro "KursAuswählen" im Modul 1:
Sub KursAuswählen()
Dim m As Integer

If UserForm1.ListBox1.ListIndex = -1 Then
    m = MsgBox("Bitte wählen Sie einen Kurs aus der Liste!", vbExclamation + vbOKOnly, "Kurs auswählen")
    UserForm1.ListBox1.SetFocus
    Exit Sub
End If
Kursname = UserForm1.ListBox1.Value
Call AlleKundenEinlesen
End Sub



Das Makro "KursAuswählen" im Modul 1:
Sub AlleKundenEinlesen()

If UserForm1.ListBox1.ListIndex = -1 Then Exit Sub

UserForm1.Label1.Visible = True
UserForm1.Combobox1.Visible = True
    For i = 2 To letztezeileKunde
        If Worksheets("Kunden").Cells(i, 2) <> "" Then
            With UserForm1.Controls("Combobox1")
                .ColumnCount = 4
                .AddItem
                .List(.ListCount - 1, 0) = Worksheets("Kunden").Cells(i, 1)
                .List(.ListCount - 1, 1) = Worksheets("Kunden").Cells(i, 2)
                .List(.ListCount - 1, 2) = Worksheets("Kunden").Cells(i, 3)
                .List(.ListCount - 1, 3) = Worksheets("Kunden").Cells(i, 7)
            End With
        End If
    Next i
End Sub


Das Makro "SortListBox" poste ich hier jetzt nicht, da ich es gegoogelt und angepasst habe!

Ich hoffe dem Einen oder Anderen ist damit vielleicht geholfen!

Lg aus dem heute verregneten Südtirol und viel Spaß, sollte es jemand nachbasteln und ausprobieren wollen!  :D

Gustav
Win7, Office Professional 2010