Aktualisierung von Listenfeldelementen in VBA

Hallo alle,

weiss jemand, wie ich Elemente in einem Listenfeld in einer bestimmten Spalte in VBA überschreiben/aktualisieren kann?

Ich habe 2 Listenfelder:Liste1 ind Liste2. In einem stehen die Daten aus einer Tabelle und ich füge die ausgewählten Elemente aus der Liste1 in die Liste2 ein, dabei wird jedem Eintrag in Liste2 eine Nummer (Spalte2) vergeben, die die Reihenfolge bestimmen soll. Dass funktioniert! Das Problem kriege ich, wenn ich dann ein Element aus der Liste2 lösche und dann diese Nummern aktualisieren möchte. Meine Idee war zuerst:

For i=0 to me.Liste2.listcount-1
Me.Liste2.Column (1,i) = i+1

Next i

Aber das funktioniert nicht, da Column Eigenschaft schreibgeschützt ist.

Die Spalte mit den Nummern ist keine gebundene Spalte, also kann mann Value Eigenschaft auch nicht anwenden, und ausserdem ist bei Liste2 Mehrauswahl möglich.

Hat jemand eine Idee?

Vielen Dank

Hallo, Lisa!

For i=0 to me.Liste2.listcount-1
Me.Liste2.Column (1,i) = i+1

Next i

Ich meine, die Eigenschaft hieß ItemData. Bin mir grad nicht sicher, weil ich kein VB6 hier habe…

Gruß, Manfred

Hallo Manfred,

For i=0 to me.Liste2.listcount-1
Me.Liste2.Column (1,i) = i+1

Next i

Ich meine, die Eigenschaft hieß ItemData. Bin mir grad nicht
sicher, weil ich kein VB6 hier habe…

ItemData ist leider für gebundene Spalten und read-only:frowning:

Es muss doch irgendwie möglich sein, oder?

Lisa

Hallo, Lisa!

Es muss doch irgendwie möglich sein, oder?

Ähem: Reden wir gerade über das „normale“ Listenfeld-Steuerelement von VB6? Oder bist Du in einer Liste unter Access? Oder Excel? Oder hast Du ein bestimmtes?

Ersteres hat doch nur eine Spalte…

Gruß, Manfred

Hallo Manfred,

ich weiß zwar auch nicht, worum es im OP geht, vermutlich Ecxel, da kenne ich mich nicht aus, aber …

Ersteres hat doch nur eine Spalte…

da irrst Du Dich. :smile: Stell mal die Eigenschaft ‚Columns‘ hoch :smile:

Gruß, Rainer

Hi Manfred!

Ähem: Reden wir gerade über das „normale“
Listenfeld-Steuerelement von VB6? Oder bist Du in einer Liste
unter Access? Oder Excel? Oder hast Du ein bestimmtes?

Ersteres hat doch nur eine Spalte…

Mein Listenfeld ist in einem Access-Formular. Und es hat 3 Spalten: Reihenfolge_Grafik, bereich_id, bereich_name. Spalte 1 (bereich_id) ist die gebundene Spalte. Reihenfolge_grafik ist die Spalte, die ich überschreiben möchte.

Ich habe mir schon überleget, dass ich mir jetzt eine temporäre Tabelle für den Zweck anlege und die Daten aus dem Listenfeld da speichere. Aber vielleicht hat jemand doch eine bessere Idee, sonst muss ich ziemlich viel in VBA-Code ändern!

Gruß Lisa

Hallo, Rainer!

ich weiß zwar auch nicht, worum es im OP geht, vermutlich
Ecxel, da kenne ich mich nicht aus, aber …

Ersteres hat doch nur eine Spalte…

da irrst Du Dich. :smile: Stell mal die Eigenschaft ‚Columns‘ hoch

-)

Gut, dann habe ich „zwei Spalten“, und wenn ich mit AddItem tausend Einträge hinzufüge, werden die in zwei Spalten angezeigt. Aber im eigentlichen Sinne habe ich nur eine Spalte, in der ein Wert steht. Dass das layoutmäßig anders aussieht, steht auf einem anderen Blatt.

Was wir aber wohl brauchen, ist eher eine „Tabelle“, in der in der ersten Spalte z. B. ein Name steht und in der zweiten Spalte ein Geburtstag, d. h. verschiedene Spalten, in denen entsprechend Paare (oder Tupel) von zusammengehörigen Werten stehen. Und das geht imho unter VB nicht (direkt). Abhilfe wäre, Einträge mit Tab zu trennen und so den Eindruck von verschiedenen „Spalten“ zu erwecken, und die entsprechend wieder zu parsen/an den Tabs zu trennen, wenn man wieder die einzelnen Komponenten der Zeile haben will…

Gruß, Manfred

Hi, Lisa!

Mein Listenfeld ist in einem Access-Formular. Und es hat 3
Spalten: Reihenfolge_Grafik, bereich_id, bereich_name. Spalte
1 (bereich_id) ist die gebundene Spalte. Reihenfolge_grafik
ist die Spalte, die ich überschreiben möchte.

Ah jetzt ja. Demzufolge steht Datenherkunftstyp auf „Wertliste“.

Ich habe mir schon überleget, dass ich mir jetzt eine
temporäre Tabelle für den Zweck anlege und die Daten aus dem
Listenfeld da speichere. Aber vielleicht hat jemand doch eine
bessere Idee, sonst muss ich ziemlich viel in VBA-Code ändern!

Tja, fragt sich, was einfacher ist. Du kannst ja die RowSource-Eigenschaft ändern. Also schreibst Du einfach:

Dim strRowSource as string
Dim i as long

For i=0 to me.Liste2.listcount-1
 ' RowSource bilden aus lfd. Nr. ab 1 und den vorhandenen 
 ' Spalten 2 und 3 (also .Column(1) und (2))
 strRowSource=strRowSource & Iif(strRowSource="","",";") \_
 & cstr(i+1)&";"& me.Liste2.column(1,i)&";"& me.Liste2.column(2,i)
Next i
me.liste2.rowsource=strRowSource

Wie immer ungetestet…

Gruß, Manfred

Hi Manfred!!!

Vielen Dank!!! Es funktioniert!!!

Lisa