Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Array wider Willen aufgeräumt
06.07.2016 12:47:29 Petra
NotSolved
06.07.2016 13:13:51 Gast41947
Solved
06.07.2016 14:52:31 Petra
Solved

Ansicht des Beitrags:
Von:
Petra
Datum:
06.07.2016 12:47:29
Views:
1401
Rating: Antwort:
  Ja
Thema:
VBA-Array wider Willen aufgeräumt

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:

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 'Hier werden noch alle Einträge angezeigt
        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 'Hier werden nur noch Einträge angezeigt, deren "Wert" nicht leer ist
                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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Array wider Willen aufgeräumt
06.07.2016 12:47:29 Petra
NotSolved
06.07.2016 13:13:51 Gast41947
Solved
06.07.2016 14:52:31 Petra
Solved