Userform Combobox mit Zeile füllen und Auswahl abfragen

Hallo Excelperten! :smile:

Ich hab ,al wieder etwas, wo ich an meine (zugegebener Maßen schnell zu erreichenden) Grenzen stoße.
Ich möchte, dass sich eine Combobox mit den Einträgen aus der Zeile 1 füllt und der Ausgewählte Eintrag zurückgegeben wird.

Das Problem was ich habe, ich finde keine Möglichkeit in den Eigenschaften die Zeilen/Spalten auszuwählen.

Bei ColumnCount gibt mir die ComboBox lediglich die erste Zeile mit allen Spalten an, welche aber nicht alleine auswählbar sind.

Unter RowSource der Eintrag 1:1 ist auch nicht hilfreich dabei :frowning:

Wie krieg ich das elegant gelöst - denn die Möglichkeit vorab in einer unsichtbaren Ecke der Mappe die Reihe in eine Spalte zu kopieren würde ich gerne umgehen…

Vielen Dank schonmal im Voraus

René

Lösung mit VBA
Hallo René,

du könntest folgendes machen:
Setze die RowSource-Eigenschaft auf Leer.
Setze ColumnCount auf 1.
Und dann lass beim Öffnen der Userform den folgenden Code laufen (musst du natürlich an deinen Gegebenheiten anpassen:

Private Sub UserForm\_Initialize()
 Dim sp As Long

 With Me.ComboBox1
 sp = 1
 While Not IsEmpty(Tabelle1.Cells(1, sp))
 .AddItem Tabelle1.Cells(1, sp)
 sp = sp + 1
 Wend
 End With
End Sub 

Gruß, Andreas

Hallo Andreas,

erstmal Dank für den Code. Nach Anpassung (erst nur minimalst zum testen - dann einmal komplettintegration versucht) funktioniert dieser nicht richtig. Er nimmt nur die erste Zelle auf… :frowning:

Hi René,

der Code läuft bis zur ersten leeren Zelle. Wenn zwischen deinen Daten-Zellen also Leerzellen sind, müssen wir den Code noch umstricken.

Gruß, Andreas

Hallo Andreas,

ich hab ja auch schon ein wenig rumgebastelt. :smile:

Die Daten stehen meistens (!) von B1 - E1. Können aber auch von A1 bis G1 stehen.

Ich hab mir jetzt mal eine „minimalform“ des Codes zusammengebastelt, ich denke da dürfte nix fehlen.

Public Sub test()

UserForm1.Show
UserForm_Initialize

End Sub

Private Sub UserForm_Initialize()
Dim sp As Long

sp = 1

With UserForm1.ComboBox1
While Not IsEmpty(ActiveSheet.Cells(1, sp))
.AddItem ActiveSheet.Cells(1, sp)
sp = sp + 1
Wend
End With

End Sub

Oder muss ich den Code an anderer Stelle einfügen.

Achja seitdem ich die RowSource entfernt habe nimmt er nichtmal mehr den ersten Eintrag :frowning:

Hallo Andreas,

Hi René

ich hab ja auch schon ein wenig rumgebastelt. :smile:

Die Daten stehen meistens (!) von B1 - E1. Können aber auch
von A1 bis G1 stehen.

Da müssen wir uns wohl noch was ausdenken, wie der Makro das erkennen kann.

Ich hab mir jetzt mal eine „minimalform“ des Codes
zusammengebastelt, ich denke da dürfte nix fehlen.

Public Sub test()

UserForm1.Show
UserForm_Initialize

Hier hast du einen Denkfehler drin:
UserForm_Initialize darfst du nicht explicit aufrufen. Die Routine startet automatisch, wenn die Userform initialisiert wird. Das geschieht, wenn du die Unserform mit Show aufrufst.

End Sub

Private Sub UserForm_Initialize()

Die Routine muss in den Codebereich der Userform. Mach im VBA-Editor einen Rechtsklick auf die Userform und wähle „Code anzeigen“. Da gehört die Routine rein.

Dim sp As Long

sp = 1

With UserForm1.ComboBox1
While Not IsEmpty(ActiveSheet.Cells(1, sp))
.AddItem ActiveSheet.Cells(1, sp)
sp = sp + 1
Wend
End With

End Sub

Oder muss ich den Code an anderer Stelle einfügen.

Ja. siehe oben.

Achja seitdem ich die RowSource entfernt habe nimmt er
nichtmal mehr den ersten Eintrag :frowning:

Was da schief läuft kann ich so nicht überblicken. Kannst du mal was hochladen?

Danke und Gruß,
Andreas

Hallo Andreas! :smile:

Die Daten stehen meistens (!) von B1 - E1. Können aber auch
von A1 bis G1 stehen.

Da müssen wir uns wohl noch was ausdenken, wie der Makro das
erkennen kann.

Ich hatte mir schon gedacht, dass ich die erste Zeile bis (vielleicht Spalte 10) durchlaufe und jeden Eintrag reinpacke.

Ich hab mir jetzt mal eine „minimalform“ des Codes
zusammengebastelt, ich denke da dürfte nix fehlen.

Public Sub test()

UserForm1.Show
UserForm_Initialize

Hier hast du einen Denkfehler drin:
UserForm_Initialize darfst du nicht explicit aufrufen. Die
Routine startet automatisch, wenn die Userform initialisiert
wird. Das geschieht, wenn du die Unserform mit Show aufrufst.

End Sub

Private Sub UserForm_Initialize()

Die Routine muss in den Codebereich der Userform. Mach im
VBA-Editor einen Rechtsklick auf die Userform und wähle „Code
anzeigen“. Da gehört die Routine rein.

Habs jetzt umgebastelt! Und siehe da: Es funktioniert!" :smiley:
Danke Dir.

Achja seitdem ich die RowSource entfernt habe nimmt er
nichtmal mehr den ersten Eintrag :frowning:

Was da schief läuft kann ich so nicht überblicken. Kannst du
mal was hochladen?

Wie gesagt, durch das Verschieben des Codes in die Userform funktionierts - einzige noch, aber da bestel ich auch dran - dass er in der ersten Zeile alle Spalten bis 10(? oder 15) durchläuft und jeden Eintrag aufführt.

Danke Dir aber Wiedermal! :smile:

René