Excel VBA: Mehrere Comboboxen auf UF auf Change überwachen

Juwee

Grünschnabel
Hallo allerseits :)
Um im Endeffekt auf einem Excel-Sheet nur ganz bestimmte Spalten anzusprechen in die dann was geschrieben werden soll habe ich mir eine Userform entworfen.
Auf der rechten Seite habe ich 4 Comboboxen für die ersten 4 Spalten (A-D) die jeweils den Inhalt ohne doppelte Einträge ausgibt.
Auf der linken Seite befinden sich 20 Label und 20 Textboxen für die Spalten E-X.
Ziel ist nun über die Auswahl in den Comboboxen aus dem ListIndex eine eindeutige 4 stellige Zahl zu generieren hinter der sich jeweils eine ganz bestimmte Kombination aus den Spalten E-X verbirgt. Genau diese sollen dann auf der linken Seite zur Verfügung stehen, der Rest soll deaktiviert sein.

cbo-png.64059


Mit dem nachfolgenden Code bin ich zumindest soweit, daß diese Zahlenkombination erzeugt wird, jedoch m.E. etwas umständlich bzw. unglücklich gelöst, da ich alle Comboboxen einzel abfrage.
Wie kann die umfassender gelöst werden bzw. der Change für alle Comboboxen überwacht werden?

Code:
Private Sub UserForm_Initialize()

Dim objDic As Object
Dim lngZ As Long

Set objDic = CreateObject("Scripting.Dictionary")

For i = 1 To 4
    For lngZ = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        objDic(Cells(lngZ, i).Value) = 0
    Next

    With Me.Controls("ComboBox" & i)
        .List = objDic.keys
        .ListIndex = 0
        .SetFocus:
        .SelStart = 0:
        .SelLength = Len(.Text)
    End With
    objDic.RemoveAll
Next

End Sub

Private Sub ComboBox1_Change()
    Controls("cbocon" & 1).Caption = Controls("Combobox" & 1).ListIndex

End Sub

Private Sub ComboBox2_Change()
    Controls("cbocon" & 2).Caption = Controls("Combobox" & 2).ListIndex
End Sub

Private Sub ComboBox3_Change()
    Controls("cbocon" & 3).Caption = Controls("Combobox" & 3).ListIndex
End Sub

Private Sub ComboBox4_Change()
    Controls("cbocon" & 4).Caption = Controls("Combobox" & 4).ListIndex
End Sub

Ich freue mich über jeden Tipp und Lösungshinweis der mir hilft dieses kleine Eingabetool zum Ende zu führen.

Grüße
Juwee
 

Anhänge

  • cbo.PNG
    cbo.PNG
    31,6 KB · Aufrufe: 87

Yaslaw

n/a
Moderator
Die Changes musst du meines Wissens nach schon pro ComboBox abfangen.
Aber die Logik lässt sich auslagern

Visual Basic:
Private Sub changeCaption(byval iNr As Long)
    Controls("cbocon" & iNr ).Caption = Controls("Combobox" & iNr ).ListIndex
End Sub

Private Sub ComboBox1_Change()
    changeCaption(1)
End Sub
 

Juwee

Grünschnabel
Hallo Yaslaw,
vielen Dank für deinen Tipp.
Ich habe natürlich in der letzten zeit auch selbst recherchiert und bin dabei hierauf gestoßen:
http://www.office-loesung.de/ftopic408497_0_0_asc.php
Demnach kann das wohl auch über eine Klasse gelöst werden.
Ich hab versucht dies umzusetzen, bin aber ziemlich gescheitert.
Geht das überhaupt in die richtige Richtung?

Gruß
Juwee
 

Juwee

Grünschnabel
Guten Morgen ...
habs dann jetzt so umgesetzt wie von Yaslaw vorgeschlagen.
Danke und Gruß

Juwee
 

Neue Beiträge