Anzeige
Archiv - Navigation
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
296to300
296to300
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Listbox mit dynamischen Daten füllen

Listbox mit dynamischen Daten füllen
19.08.2003 08:23:18
Hallimax
Hallo zusammen,
ich möchte eine 3-spaltige Listbox mit Datensätzen füllen, deren Anzahl mir vorher nicht bekannt ist. Dazu fülle ich das Array "Puffer", welches ich dann an die Listbox.List übergebe. ListBox.AddItem verwende ich aus Performancegründen nicht! Die Daten, deren Anzahl ich vorher nicht weiß, stammen aus einer Matrix. Das Makro prüft das komplette Feld "Daten" nach Einträgen und schreibt diese dann nacheinander in das Array "Puffer".
Das Problem:
Die Listbox übernimmt alle 10000 Zeilen des Arrays "Puffer", auch die leeren. Das sieht sch.... aus. Gibt es nicht die Möglichkeit "Puffer" dynamisch zu erstellen?
Hier das vereinfachte Beispiel:

Private Sub UserForm_Activate()
Dim Daten(99, 99) As String
Dim c1 As Long
Dim c2 As Long
Dim Puffer(9999, 2) As String
Dim x As Long
With UV_Toolbox
ListBox1.ColumnCount = 3
Daten(13, 17) = "test": Daten(23, 45) = "test": Daten(1, 16) = "test"
x = 0
For c1 = 0 To UBound(Daten, 1)
For c2 = 4 To UBound(Daten, 2)
If Daten(c1, c2) <> "" Then
Puffer(x, 0) = Daten(c1, c2)
Puffer(x, 1) = CStr(c1)
Puffer(x, 2) = CStr(c2)
x = x + 1
End If
Next c2
Next c1
ListBox1.List = Puffer
End With
End Sub

Vielen Danke für Eure Bemühungen im Voraus :o)
Gruß
Hallimax

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit dynamischen Daten füllen
19.08.2003 09:18:25
sergiesam
Hi,
ja gibt es

Sub DeinCode()
Dim Puffer() as string  'Dynamische Deklaration
If Daten(c1, c2) <> "" Then
reDim Preserve Puffer(x,2) as String    'Neudeklaration mit x-Dimension
Puffer(x, 0) = Daten(c1, c2)
Puffer(x, 1) = CStr(c1)
Puffer(x, 2) = CStr(c2)
x = x + 1
End If
End Sub

Preserve bewirkt, dass die Werte im bisherigen Array gespeichert bleiben. Ohne Preserve wird neu dimensioniert aber alles entleert.
Lies dir die Hilfe von ReDim einfach durch....
Sam

AW: Listbox mit dynamischen Daten füllen
19.08.2003 09:28:06
Hallimax
Hallo Sam,
vielen Dank für die schnelle Antwort! Leider funzt Dein Beispiel nicht, da sich ReDim nur auf die letzte Dimension eines Arrays bezieht. Versucht man es anders kommt "out of index"...
Bin also für weitere Vorschläge sehr dankbar!
Gruß
Hallimax

Anzeige
AW: Listbox mit dynamischen Daten füllen
19.08.2003 09:40:46
Michael Scheffler
Hi,
da wirst Du Deine Matrix wohl transponieren müssen, dann kannst Du Redim verwenden - oder nicht?
Gruß
Micha

AW: Listbox mit dynamischen Daten füllen
19.08.2003 09:59:08
Hallimax
Hallo Micha,
genau das habe ich auch schon probiert, aber dann ist die Routine so langsam wie mit ListBox.AddItem :-(
Oder gibt es ein Befehl für das Transponieren von Arrays?
Gruß
Hallimax

AW: Listbox mit dynamischen Daten füllen
19.08.2003 10:40:54
sergiesam
HI,
mich wundert, dass die AddItem sooo viel langsamer ist als die Zuweisung zum Array. Wie viele werte sind es denn?
Sam

AW: Listbox mit dynamischen Daten füllen
19.08.2003 11:01:03
Hallimax
Hallo Sam,
die Routine ListBox.AddItem versucht immer gleich die Liste zu aktualisieren und Excel versucht diese dann gleich mit neuen Inhalt darzustellen - das schleift auf unseren langsamen Firmenrechnern ungemein. (sind eben nur Packesel *g*) Aber das Berechnen im Speicher läuft recht flott und bei Übergabe des Arrays an die Liste wird diese auch nur einmal refreshed. An Datensätzen sind mit bis zu 300 zu rechnen und dies läuft ganz gut mit einem Array. Noch als Erklärung: Die Liste dient lediglich der Darstellung einer Auswahl, welche aber durch Anklicken sich schnell aktualisieren muß.
Gruß
Hallimax

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige