【问题标题】: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))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-25
          • 1970-01-01
          • 1970-01-01
          • 2013-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多