Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Maximilian am Mai 28, 2020, 16:42:40

Titel: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: Maximilian am Mai 28, 2020, 16:42:40
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
Titel: Re: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: Beaker s.a. am Mai 28, 2020, 16:54:13
Hallo Maximilian,
Du musst die beiden Werte ;-getrennt übergeben
ctrlListBox.AddItem Item:="Wert1; Wert2"
gruss ekkehard
Titel: Re: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: Maximilian am Mai 28, 2020, 17:03:01
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
Titel: Re: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: DF6GL am Mai 28, 2020, 17:20:50
Hallo,

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

Me!lstListbox.AddItem Item:=strWert1 & ";" & strWert1
Titel: Re: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: Maximilian am Mai 28, 2020, 17:24:12
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
Titel: Re: Listbox mit zwei Spalten mittels .AddItem füllen
Beitrag von: crystal am Juni 08, 2020, 11:13:56
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