Hallo und Mahlzeit allerseits!
Ich habe ein dynamisches Array, das auf einem benutzerdefinierten Datentyp (mit den Eigenschaften "Name" und "Wert") basiert. Dies fülle ich schleifenweise mit Daten, z.B.
i = 0 Name: Rote Johannisbeere Wert: Rot
i = 1 Name: Schwarze Johannisbeere Wert: Schwarz
i = 2 Name: Stachelbeere Wert: <leer> (vielleicht, weil ich den "Wert" später erst setzen will)
i = 3 Name: Erdbeere Wert: Rot
i = ... etc.
Das klappt soweit gut, ich habe zu jedem i einen "Namen" und einen "Wert", und, wie oben, eben auch <leere> Werte. Kein Problem, wird alles im Array hinterlegt. Nun möchte ich eine ListBox füllen mit zwei Spalten, eine für "Name" und eine für "Wert". Jede Zeile entspricht also einem Eintrag i im Array. Auch kein Problem, das Füllen spuckt mir Zeilen aus mit "Name" und dazugehörigem "Wert", auch wenn dieser <leer> ist.
Mein Wunsch ist es aber, in der ListBox die Einträge auszublenden, deren "Wert" <leer> ist. Zu diesem Zeitpunkt sind solche "Namen" mit <leeren> "Werten" einfach nicht relevant (aber später wieder). Abfrage programmiert, ob "Wert" <leer> ist und wenn ja, überspringt die Schleife das jeweilige i und geht zum nächsten über. Klappt gut, <leere> "Werte" samt "Namen" werden nicht in der ListBox angezeigt:
Name Wert
Rote Joahnnisbeere Rot
Schwarze Johannisbeere Schwarz
Erdbeere Rot
Will ich später an anderer Stelle auf das Array zugreifen, um z.B. "Werte" zu ändern (und <leere> "Werte" bspw. zu füllen), sind solche Einträge (hier i = 2) aber nicht mehr im Array ansteuerbar - obwohl ich seit dem Füllen des Arrays nicht mehr mit ReDim gearbeitet habe und als hätte ich das Array nie mit Einträgen gefüllt, deren "Wert" <leer> gewesen wäre! Das verstehe ich eben nicht. Wieso wurde das Array von Einträgen gesäubert, deren "Wert" <leer> war? Ich habe doch lediglich die ListBox gefüllt. Hier ist mein Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | For i = 0 To 10 Step 1
ReDim Preserve Array(j)
Array(j).Name = .Cells(i+1,1).Value
Array(j).Wert = .Cells(i+1,2).Value
MsgBox Array(j).Name & " " & Array(j).Wert
If Not Array(j).Wert = "" Then
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "5cm;5cm;"
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = Array(j).Name & ":"
ListBox1.List(ListBox1.ListCount - 1, 1) =Array(j).Wert
MsgBox Array(j).Name & " " & Array(j).Wert
j = j + 1
End If
Next i
|
Versteht das jemand von euch? Denn mir ist nicht klar, warum das Array durch die If-Abfrage geändert wurde... Für Erklärungsversuche bin ich dankbar!
Grüße, Petra
|