我有一段似乎没有按预期做的代码。 VBA Arrays一定是可变的,但似乎当它们作为某些键的值存储到Dictionary中时,它们不再是可变的。有什么想法吗?
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 :(得分:10)
您似乎还需要设置另一个var来更新数组值。
mArray = mydict.Item(1)
mArray(1) = 34
mydict.Item(1) = mArray
答案 1 :(得分:0)
我会写这个答案作为对Irizarry先生答案的评论,但我不被允许。无论如何....我尝试编写最后一行代码(下面)将数组分配给字典的第一项,但它不起作用。该项目中的数组保持原样。
mydict.items(1) = mArray
根据我在其他地方读到的内容,它似乎与你要调用的字典实例有关。我将其更改为以下行并且有效。
mydict(mydict.keys(1)) = mArray
我仍然不确定为什么会这样,但确实如此。
答案 2 :(得分:0)
我创建了一个程序来解决同样的问题,所以我可以把它作为一个" oneliner":
Private Sub pReplaceDicArray(Dic As Object, kEy As Variant, Element As Integer, NewValue)
Dim tempArray As Variant
tempArray = Dic(kEy)
tempArray(Element) = NewValue
Dic(kEy) = tempArray
End Sub
' call as:
' Call mReplaceDicArray(Dic, "A", 1, 8)