2010-03-08 14 views
7

Ich habe ein Stück Code, das nicht zu tun scheint, was zu tun ist. VBA-Arrays sind auf alle Fälle veränderbar, aber wenn sie in einem Dictionary als Werte einiger Schlüssel gespeichert werden, sind sie nicht mehr veränderbar. Irgendwelche Ideen?Array-Werte in einem VBA-Wörterbuch ändern

Sub foo() 
    Dim mydict As New Dictionary 
    mydict.Add "A", Array(1, 2, 3) 
    MsgBox mydict("A")(1) 
    ''# The above shows 2, which is fine 
    mydict("A")(1) = 34 
    MsgBox mydict("A")(1) 
    ''# The above also shows 2, which is not fine 
End Sub 
+0

Das Problem ist, dass wenn Sie das Array aus dem Wörterbuch mit Mydict ("A") erhalten, erhalten Sie eine Kopie und keine Referenz. Siehe: http://stackoverflow.com/questions/1402876/vba-populating-collection-with-arrays/1402986#1402986 – jtolle

Antwort

9

Es scheint, dass Sie noch brauchen eine andere var, um den Array-Wert zu aktualisieren.

mArray = mydict.Item(1) 
mArray(1) = 34 
mydict.Item(1) = mArray 
+0

funktioniert gut für mich! – Gordon

0

Ich hätte diese Antwort als Kommentar zu Mr. Irizarrys Antwort geschrieben, aber ich bin nicht erlaubt. Wie auch immer .... Ich habe versucht, die letzte Codezeile (unten) zu schreiben, um das Array dem ersten Element des Wörterbuchs zuzuweisen, aber es hat nicht funktioniert. Das Array in diesem Objekt blieb unverändert.

mydict.items(1) = mArray 

Basierend auf dem, was ich an anderer Stelle gelesen habe, scheint es mit der Instanz des Wörterbuchs zu tun zu haben, das Sie aufrufen. Ich habe es in die folgende Zeile geändert und es hat funktioniert.

mydict(mydict.keys(1)) = mArray 

Ich bin mir immer noch nicht sicher, warum das der Fall ist, aber da ist es.

Verwandte Themen