Combobox/ListBox füllen VBA

Hallo

ich lese beim googeln zwar immer wie man eine Listbox füllt (Boxname.additem eintrag) und wenn ich die Listbox in ein Userform setze, also man klickt auf einen Button, es erscheint ein Userform und da ist die Listbox, funktioniert das auch, wenn ich ein userform_initialize ins Klassenmodul setze. Nun habe ich aber eine Combobox einfach in meinem Sheet stehen, also ohne über ein Button aufzurufendes Userform.
Wenn ich die Datei öffne ist die List leer. Lasse ich dann per Hand mein Script laufen um die Eintröge zu füllen passt alles. Aber wie bekomme ich es hin, dass die Einträge von selbst drin stehen?
Ich bin mehr so learning by doing mäßig unterwegs (wie man merkt), von daher liegt es wahrschienlich daran, dass ich irgendwas an der falschen Stelle eingetragen habe.
Ich bin wie folgt vorgegangen:
Ich habe in Tabelle1 die Box
In Editor steht bei Tabelle1 der Code
Private sub Boxname_initialize (brauch ich das oder ist das nur für Userforms? und gehört das hier her?)
box.additem „1“
box.additem „2“
.
.
.
.
end sub

um durch eine Auswahl etwas auszulösen steht darunter

Private sub box_change()
auswahl=box.text

prozendur…

end sub

Über folgendes mache ich mir Gedanken
gehört der Code zum Listenfüllen wirklich in Tabelle1
oder ins Klassenmodul (also „Diese Arbeitsmappe“)?

Ich habe das Gefühl ich habe alle Elemente beisammen aber werfe die Reihenfolge oder die Orte an die sie gehören durcheinander…

Wenn jemand Licht in meine Verwirrung bringen könnte wäre ich dankbar :smile:

Grüße
rm

hallo reicher Mann,

Wenn jemand Licht in meine Verwirrung bringen könnte wäre ich
dankbar :smile:

kriegen wir schon, bringe aber du erstmal Licht in die Dunkelhit meiner Verwirrungen.
Du hast kein Klassenmodul selbst angelegt, geschrieben, richtig?
Das mit der Userform dient nur zu meiner Verwirrung, du hast da eine Combobox in der Tabelle, richtig?

Über folgendes mache ich mir Gedanken
gehört der Code zum Listenfüllen wirklich in Tabelle1
oder ins Klassenmodul (also „Diese Arbeitsmappe“)?

Du irrst irgendwie.
Sowohl das Modul „Diese Arbeitsmappe“ als auch das Modul „tabelle1“ usw. sind Klassenmodule.

Jetzt mal angenommen, du hast eine Combobox in deinem Tabellenblatt, dann gibts da kein Initialize-Ereignis.

Du kannst sie befüllen mit .Add bzw. AddItem, weiß grad nicht was richtig ist, oder aber du setzt manuell oder per Code den ListFillRange.

Im zweiten Fall kannst du mit Add oder Remove oder sonstwie nicht den Inhalt der Combobox verändern.
Du mußt dann ListFillRange, also z.B. Tabelle1!A1:A37 verändern.

Gruß
Reinhard

hallo reicher Mann,

lol

Wenn jemand Licht in meine Verwirrung bringen könnte wäre ich
dankbar :smile:

kriegen wir schon,

super
bringe aber du erstmal Licht in die

Dunkelhit meiner Verwirrungen.

mach ich

Du hast kein Klassenmodul selbst angelegt, geschrieben,
richtig?

richtig

Das mit der Userform dient nur zu meiner Verwirrung, du hast
da eine Combobox in der Tabelle, richtig?

richtig

Über folgendes mache ich mir Gedanken
gehört der Code zum Listenfüllen wirklich in Tabelle1
oder ins Klassenmodul (also „Diese Arbeitsmappe“)?

Du irrst irgendwie.
Sowohl das Modul „Diese Arbeitsmappe“ als auch das Modul
„tabelle1“ usw. sind Klassenmodule.

aahh

Jetzt mal angenommen, du hast eine Combobox in deinem
Tabellenblatt, dann gibts da kein Initialize-Ereignis.

ok

Du kannst sie befüllen mit .Add bzw. AddItem,

habs mit additem gemacht und das funktioniert auch

Wenn ich den Code ausführe steht in der Liste auch alles drin, also alle items. Nur wenn ich die Datei speichere und wieder öffne ist die Liste wieder leer, bis ich den Code mit additem neu ausführe. (Damit meine ich im Editor im Sub F5 und durchlaufen lassen)
Eine Lösung wäre beim öffnen der Arbeitsmappe automatisch box.additem 1… ausführen zu lassen. Aber es muss doch möglich sein dass das gespeichert wird.
Hoffe ich hab Dich erleuchtet :smile:
Vielen Dank aber schon mal für die Lehrstunde was Klassenmodule etc pp sind. bisschen Terminologie hilft doch enorm :smile:

Moin, rm,

die Zweisung muss an ein Erteignis gebunden werden, das wäre hier sinnvollerweise das Öffnen der Mappe, also gehört in die Arbeitsmappe der Code

Private Sub Workbook\_Open()

 Tabelle1.ComboBox1.AddItem ("A")
 Tabelle1.ComboBox1.AddItem ("B")
 Tabelle1.ComboBox1.AddItem ("C")
 Tabelle1.ComboBox1.AddItem ("D")
End Sub

oder wie immer das Zeuchs bei Dir aussehen soll.

Private sub box_change()
auswahl=box.text

end sub

Das reagiert auf die Änderung der Combobox, somit gehört es zu Tabelle1, dort findest Du links das Element box und rechts das Ereignis Change.

gehört der Code zum Listenfüllen wirklich in Tabelle1
oder ins Klassenmodul (also „Diese Arbeitsmappe“)?

Ist eigentlich egal, wenn Du die Anweisung mit dem Tabellennamen qualifizierst.

Wenn damit zu rechnen ist, dass Tabelle1 nicht geöffnet wird, dann hat es einen „Vorteil“, den Code dort zu plazieren - er würde dann gar nicht erst ausgeführt. In Anbetracht dessen, dass Excel garantiert schneller rechnet, als der Anwender schaut, kommt es darauf aber nicht an.

Gruß Ralf

So, vielen Dank an euch beide, klappt alles wunderbar. Vielleicht noch eine Ergänzung an Leute die nach mir kommen und noch weniger Ahnung haben.
Mit Tabelle1.ComboBox1.AddItem („D“) ist
worksheets(„tabelle1“).Combobox1.additem („D“) gemeint (jedenfalls wenn man es in die Arbeitsmappe schreibt)
So gehts jedenfalls bei mir.
Ich halte mal für meine zukünftige Arbeit fest: Zuweisungen müssen immer an ein Eregnis gebunden sein.

Und demnächst gewöhn ich mir auch noch das selecten ab :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi rm,

Zuweisungen müssen immer an ein Eregnis gebunden sein.

sagen wir mal so: Prozeduren rufen sich nicht von selbst auf :wink: Deshalb wird immer ein Ereignis gebraucht, sei es das Laden eines Worksheets, eine Eingabe, ein Klick oder sonstwas.

Gruß Ralf