更改VBA字典中的数组值

时间:2010-03-08 19:47:23

标签: excel-vba dictionary arrays vba excel

我有一段似乎没有按预期做的代码。 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

3 个答案:

答案 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)