Neuigkeiten:

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

Mobiles Hauptmenü

Listbox mit zwei Spalten mittels .AddItem füllen

Begonnen von Maximilian, Mai 28, 2020, 16:42:40

⏪ vorheriges - nächstes ⏩

Maximilian

Hallo Zusammen,

ich bin's mal wieder  ;D
Habe mal wieder ein Problem und komme nicht weiter. Bereits lange gesucht und auch viele Ergebnisse gefunden, die bei mir allerdings nur neue Fehlermeldungen erzeugen.

Auf einem Formular möchte ich per VBA in eine zweispaltige Listbox Einträge hinzufügen. Die Einträge werden nur temporär in der Listbox angezeigt und zwischengespeichert. Durch einen Button "Speichern" werden die Werte dann weiterverarbeitet und aus der Listbox wieder gelöscht.
Die Listbox hat also keine Tabelle oder Abfrage im Hintergrund und ist als "Herkunftstyp = Werteliste" parametriert.

Für das Hinzufügen von Daten habe ich die ".AddItem"-Methode bereits recherchiert und für die erste Spalte auch erfolgreich getestet. Nur bekomme ich es einfach nicht hin, auch die zweite Spalte der Listbox mit Daten zu füllen.

Bisher habe ich noch die .list und .column Methode recherchieren können, die allerdings alle nicht funktionieren und Fehlermeldungen generieren.

Letzte Lösung sehe ich momentan nur noch, eine Tabelle im Hintergrund anzulegen, wo ich meine Daten zwischenspeichern kann. Die Tabelle muss ich dann im VBA wieder leerräumen, wenn ich sie nicht mehr benötige.... nur das kann doch nicht die Lösung sein oder doch?

Grüße und danke für eure Hilfe,
Maximilian

Beaker s.a.

Hallo Maximilian,
Du musst die beiden Werte ;-getrennt übergeben
ctrlListBox.AddItem Item:="Wert1; Wert2"
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Maximilian

#2
okay das klappt, eeendlich  :)
Nur jetzt kann ich nur zwei feste Strings übergeben. Wie schaffe ich das mit den Inhalten zweier Variablen?

lstListbox.AddItem Item:=strWert1; strWert1

funktioniert leider auch wieder nicht

DF6GL

Hallo,

das sollte aber schon bekannt sein, wie man einen String aus Variablenwerten zusammensetzt...

Me!lstListbox.AddItem Item:=strWert1 & ";" & strWert1
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Maximilian

Ja ist es auch, Asche auf mein Haupt  :-[ Bin durch das lange Suchen bei Tante Google schon etwas matsche in der Rübe

Vielen Dank euch beiden für die  schnelle Hilfe.
Grüße,
Maximilian

crystal

Hallo, noch ein Hinweis zu .AddItem:

Die Methode ist etwas langsam, vor allem dann, wenn man viele Werte in die Listbox eintragen möchte.

Besser ist es dann, alle Werte ;-getrennt in einem String zusammen zu setzen und den gesamten String dann per .RowSource der Listbox zuzuweisen, etwa so

for i = 1 to 100
   s = s & "Spalte 1 = "& i & ";" & "Spalte 2 = " & i & ";"
oder so:
   s = s & variable1 & ";" & variable2 & ";"
next
  Listbox.RowSource = s


Das ist deutlich schneller als .AddItem. Im Listbox-Control muss natürlich "Werteliste" und Spaltenzahl 2 angegeben sein. Es ist übrigens nicht nötig, die einzelnen Werte in " einzuschließen. Access trennt schlicht bei ";". Das ist vergleichbar mit dem Import von CSV-Dateien in Excel (mit ; statt , als Trennzeichen). (Könnte problematsch werden, wenn ein Wert selbst das Zeichen ; enthalten kann. Dann muss man den Wert natürlich mit chr$(34) klammern.)

Das geht natürlich nur, wenn die Listbox vorher noch keine Werte enthält. Da könnte man die alten Werte aber retten, indem man s mit ihnen vorbelegt, also

for k = 0 to listbox.listcount - 1
   s = s & listbox.column(0, k) & ";" & listbox.column(1, k) & ";"
next
s = s & "neu spalte1;neu spalte2;auch neu S1;auch neu S2;"  '...und 2 neue Zeilen dazu
listbox.rowsource = s
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...