Kombinationsfeld / Combobox füllen |
|
|
Hier sind einige mir bekannte Möglichkeiten, ein Kombinationsfeld mit Werten zu füllen.
Zunächst der Fall, dass sich das Kombinationsfeld ( Combobox ) in einer Userform befindet.
Kombinationsfeld in Userform
|
In diesem Beispielen wird das Kombinationsfeld beim Öffnen der Userform durch das "Initialize"-Ereignis mit Werten gefüllt. Alle hier aufgeführten Codes werden beim Aufruf ausgeführt.
Rechtsklick auf die Userform und "Code anzeigen" auswählen.
Und nach Klick auf den rechten Listenpfeil "Initialize"
Damit die Userform etwas komfortabler aufgerufen werden kann, habe ich mir einen Button ( Formularleiste ) ins Tabellenblatt gelegt, und folgende Prozedur in ein Modul.
Verbinden kann man den Button mit dem Code so:
Rechtsklick auf Button
Zum Schliessen einen Button ( dann aber aus Werkzeugsammlung ) in die Userform - Rechsklick auf Button und folgenden Code:
Beispiel 1.)
Hier sind die Daten einzeln im Code hinterlegt:
Private Sub UserForm_Initialize()
' Die Daten werden im Code Zeilenweise eingetragen
With Me.ComboBox1
.AddItem "Müller"
.AddItem "Meier"
.AddItem "Schmitz"
.AddItem "Weber"
.AddItem "Mustermann"
.ListIndex = 2 'Vorbelegung "Schmitz" bei Formularstart
End With
End Sub
Beispiel 2.)
Kombinationsfeld wird per Schleife gefüllt. In diesem Beispiel von 1 bis 100.
Vorbelegt ist der Wert "65"
Private Sub UserForm_Initialize()
Dim intI As Integer
With Me.ComboBox1
For intI = 1 To 100
.AddItem CStr(intI)
Next
.Text = "65"
End With
End Sub
Beispiel 3.)
Kombinationsfeld wird durch "RowSource" und "List" mit Listeneintrag gefüllt.
Private Sub UserForm_Initialize()
Me.ComboBox1.RowSource = "A3:A5"
End Sub
Alternativ auch mit einem zuvor namentlich erstellten Bereich.
Hier nun der große Vorteil, einen Bereich auch dynamisch zu gestalten.
( Siehe Tipps & Tricks -> Bereiche definieren )
Der Bereich1 umfasst hier ebenfalls A3:A5
Private Sub UserForm_Initialize()
Me.ComboBox1.RowSource = "Bereich1"
End Sub
Eine weitere Möglichkeit über die List-Eigenschaft:
Private Sub UserForm_Initialize()
Me.ComboBox1.List = Range("A3:A5").Value
End Sub
Hier läßt sich der Bereich auch leicht dynamisch gestalten.
Es wird zunächst der unterste Eintrag, hier wieder Spalte A, ermittelt.
Private Sub UserForm_Initialize()
Dim lngUntersterEintrag As Long
lngUntersterEintrag = Range("A65536").End(xlUp).Row
Me.ComboBox1.List = Range("A3:A" & lngUntersterEintrag).Value
End Sub
Eine weitere Möglichkeit besteht, indem der einzulesende Datenbereich im Eigenschaftenfenster des Kombinationsfeldes eingetragen wird.
Beispiel 4.)
Sollen nur Unikate eingelesen werden, so siehe auch Programmierung -> Kombinationsfeld / Combobox ohne Duplikate füllen.
Kombinationsfeld in Tabelle
Befindet sich das Kombinationsfeld direkt in der Tabelle, so gibt es folgende Möglichkeiten es zu füllen:
Rechtsklick auf das Steuerelement und im Kontextmenü "Code anzeigen" auswählen.
oder Alternativ Rechtsklick auf Tabellenreiter
oder Alternativ Doppelklick auf entsprechende Tabelle im Projektexplorer
Im rechten Listenfeld "Activate" auswählen. Wird das Tabellenblatt ausgewählt, so werden hier hinterlegte Codes ausgeführt.
Beispiel 1.)
Mit diesem Code wird das Kombinationsfeld gefüllt
Private Sub Worksheet_Activate()
ComboBox1.List = Range("A1:A10").Value
End Sub
Beispiel 2.)
oder von einem anderen Tabellenblatt und dynamisch gehalten.
Private Sub Worksheet_Activate()
With Worksheets("Tabelle2")
ComboBox1.List = .Range(.Cells(1, 8), .Cells(.Rows.Count, 8).End(xlUp)).Value
End With
End Sub
Wie auch beim Kombinationsfeld, welches sich in einer Userform befindet, kann der Bereich direkt im Eigenschaftenfenster eingegeben werden.
Selektierte Daten in Tabelle schreiben
Abschließend noch der Hinweis, wie die ausgewählten Daten zurück in die Tabelle geschrieben werden können.
Ein Beispiel für das Kombinationsfeld in der Userform.
Code in das Changeereignis des Kombinationsfeldes.
oder beim Kombinationsfeld in der Tabelle
Alternativ über die "LinkedCell" im Eigenschaftsfenster.
|