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
Hallo Maximilian,
Du musst die beiden Werte ;-getrennt übergeben
ctrlListBox.AddItem Item:="Wert1; Wert2"
gruss ekkehard
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
Hallo,
das sollte aber schon bekannt sein, wie man einen String aus Variablenwerten zusammensetzt...
Me!lstListbox.AddItem Item:=strWert1 & ";" & strWert1
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
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