【问题标题】:Changing array values in a VBA dictionary更改 VBA 字典中的数组值
【发布时间】:2011-01-25 03:24:49
【问题描述】:
我有一段代码似乎没有达到预期的效果。 VBA 数组无论如何都是可变的,但似乎当它们作为某些键的值存储到字典中时,它们不再是可变的。有什么想法吗?
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
【问题讨论】:
标签:
excel
dictionary
arrays
vba
【解决方案1】:
看来您还需要设置另一个 var 来更新数组值。
mArray = mydict.Item(1)
mArray(1) = 34
mydict.Item(1) = mArray
【解决方案2】:
我会写这个答案作为对 Irizarry 先生的回答的评论,但我不被允许。无论如何....我尝试编写最后一行代码(如下)以将数组分配给字典的第一项,但它不起作用。该项目中的数组保持原样。
mydict.items(1) = mArray
根据我在其他地方读到的内容,这似乎与您调用的字典实例有关。我将其更改为以下行并且它起作用了。
mydict(mydict.keys(1)) = mArray
我仍然不确定为什么会这样,但确实如此。
【解决方案3】:
我创建了一个程序来解决同样的问题,所以我可以将其保留为“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)
【解决方案4】:
复制数组并更新值:
mydict("A") = Array(mydict("A")(0), 34, mydict("A")(2))