Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 更改VBA字典中的数组值_Excel_Dictionary_Arrays_Vba - Fatal编程技术网

Excel 更改VBA字典中的数组值

Excel 更改VBA字典中的数组值,excel,dictionary,arrays,vba,Excel,Dictionary,Arrays,Vba,我有一段代码,它似乎没有达到预期的效果。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 MsgBo

我有一段代码,它似乎没有达到预期的效果。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

似乎还需要设置另一个var来更新数组值

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

我本想写这个答案作为对Irizarry先生答案的评论,但我不被允许。无论如何我尝试编写最后一行代码(如下)将数组分配给字典的第一项,但没有成功。该项中的数组与以前一样

mydict.items(1) = mArray
根据我在其他地方读到的,这似乎与你正在调用的词典的实例有关。我把它改成了下面的一行,它成功了

mydict(mydict.keys(1)) = mArray

我仍然不确定为什么会这样,但事实就是如此。

我创建了一个程序来解决相同的问题,因此我可以将其作为“一行程序”:


问题是,当你用mydict(“A”)从字典中取出数组时,你得到的是一个副本,而不是一个引用。见:
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)