HERBERS Excel-Forum - das Archiv

Thema: array in array oder in dictionary ändern geht nicht

array in array oder in dictionary ändern geht nicht
Florian
Hallo

verstehe nicht warum manche Aktionen in einem Array, das in einem Array ist, nicht gehen, andere schon?

Im folgenden Beispiel kann ich einen bestimmten Wert eines Arrays, das in einem anderen Array ist, ändern und auslesen.

Ein Arrays, das in einem anderen Array ist, kann ich aber nicht in Größe ändern oder neu redimsnionieren. Ebenso kann ich Arrays in zB Dictionaries nicht ändern. Da muss ich es erst auf eine neue Variable kopieren, dort die Anderung vornehmen und dann wieder zurückstellen.

Gibt es dafür eine Erklärung oder Regeln?



Sub NeuerTest()
Dim a, b, c
Dim Verzeichnis As New Dictionary
a = Array(1, 2, 3)
b = Array(30, 50, "RR")
c = Array(a, b)
Verzeichnis.Add "Apfel", c

'Das geht:
Debug.Print c(1)(2) 'druckt "RR" als Eintrag eines Arrass in einem Array
c(1)(2) = "TT" 'überschreibt Eintrag eines Arrass in einem Array,
Debug.Print c(1)(2) 'druckt "TT" was auch funktioniert
Debug.Print Verzeichnis("Apfel")(0)(1) 'druckt 2 als Eintrag eines Arrass in einem Array

'Folgende Zeile geht nicht:
' ReDim c(1)(31) 'Kann das nicht schreiben
Verzeichnis("Apfel")(0)(1) = 777 'array in array in dict geht nicht, lässt es aber ohne Meckern durchführen
Debug.Print Verzeichnis("Apfel")(0)(1) 'soll 777 drucken, tut es aber nicht

'Umständliche Hilfskonstruktion schaffen Abilfe
Dim Hilfsarray
ReDim Hilfsarray(31)
c(1) = Hilfsarray
Hilfsarray = Verzeichnis("Apfel")(0)
Hilfsarray(2) = 777

'Hier muss es noch umständlicher gehen.
Dim HilfsHilfsArray
Hilfsarray = Verzeichnis("Apfel") 'Erst array rauskopieren,
HilfsHilfsArray = Hilfsarray(1) 'dann von dem das innere Array rauskopieren
HilfsHilfsArray(1) = "Banane" 'Wert ändern
Hilfsarray(1) = HilfsHilfsArray 'Inneres Array in äußeres Array zurück kopieren
Verzeichnis("Apfel") = Hilfsarray 'Aüßeres Array in dict zurück kopieren
Debug.Print Verzeichnis("Apfel")(1)(1) 'druckt "Banane", funktioniert.
End Sub


lg flo
AW: array in array oder in dictionary ändern geht nicht
daniel
Hi
ich bin da jetzt auch kein Kenner der Programmierung einer Programmiersprache, aber ich vermute folgendes:
egal was du hast, (mehrdimensionales Array, Array im Array, Dicionary) in intern kann VBA die Daten immer nur sequentiell (also als eindimensionales Array) ablegen.
die Mehrdimensionalität wird dann dadurch simuliert, dass die Werte in dieser Sequenz an festen Positionen liegen.

vereinfacht kann man sich das so vorstellen, als würde man Schiffe-Versenken auf einem Zollstock spielen, hierbei wäre dann cm1-10 die Spalte A, cm 11-20 die Zeile B , cm 21-30 die Spalte C usw

alle Änderungen im Array, die jetzt Einfluss auf die Positionierung der Einzelwerte in der Ablagesequenz haben oder haben könnten, können jetzt nicht mehr auf dem direkten Weg durchgeführt werden, sondern müssen den umständlichen Weg gehen, weil ja dann die Werte auf neue Speicherpositionen geschoben werden müssen und die "Landkarte" (welcher Wert steht neu im Speicher) neu erstellt werden muss.

um beim Beispiel zu bleiben, wenn du jetzt beschließt, dass die Spalte A nicht mehr 10 sondern 11 Elemente haben soll, dann würden sich die Positionen aller anderen Werte verschieben ("B1" ist dann nicht mehr cm11, sondern cm12 usw.

die dazu notwendigen Abläufe finden eben beim neu erstellen statt, daher muss man dann diesen Weg gehen.

Gruß Daniel
AW: array in array oder in dictionary ändern geht nicht
Onur
Bei Dictionaries kann man ein "Item", das einem "Key" zugeordnet wird, nur ZUWEISEN, aber nicht verändern.
d.h.: Du kannst im Falle von Arrays nur das Array KOMPLETT übergeben, aber nicht Teile des übergebenen Arrays verändern, wenn es einmal zugewiesen wurde, höchstens neu zuweisen.
Das ist ähnlich wie bei Konstanten. Zuweisen ok, verändern geht nicht.