以下代码:
Dim arr As Variant, item As Variant
arr = Array(1)
arr(0) = 5
For Each item In arr
Debug.Print item
Next
打印5
;它似乎成功地修改了数组的内容。
但是,如果我创建Dictionary
,并将数组放在其中一个字典键上:
Dim dict As New Scripting.Dictionary, item As Variant
dict("a") = Array(1)
dict("a")(0) = 5
For Each item In dict("a")
Debug.Print item
Next
数组是只读的;编辑被忽略,代码打印1
- 原始值。
为什么我可以修改通过变量引用的数组的元素,但不能修改通过调用Dictionary.Item引用的数组的元素;我该如何解决这个问题?
答案 0 :(得分:1)
以下是字典的实例:
Listening on http://127.0.0.1:6796
[1] "I should only print once"
[1] "Return input"
[1] "test"
还要看一下嵌套数组:
Sub Test()
Dim dict As New Scripting.Dictionary, item As Variant
dict("a") = Array(1)
Dim arr
arr = dict("a")
arr(0) = 5
dict("a") = arr
For Each item In dict("a")
Debug.Print item
Next
End Sub
答案 1 :(得分:0)
只是通过扩展@omegastripes答案的例子以及我对VBA中引用变量的评论来澄清你的问题
评论:您正在设置字典的值。您没有设置数组项的值。你不能设置字典 item对数组的引用 - 您可以设置一个数组值然后设置 数组项的字典 - 但是使用的值不是 参考
这是一个示例,表明当您将变量分配给另一个变量时,VBA不存储对该变量的引用
Sub Test()
Dim dict As Object, item As Variant
Dim arr
Set dict = CreateObject("Scripting.Dictionary")
dict("a") = Array(1)
arr = dict("a")
arr(0) = 5
dict("a") = arr
For Each item In dict("a")
Debug.Print item
' Prints 5
Next
' Change array contents
arr(0) = 10
For Each item In dict("a")
Debug.Print item
' Still Prints 5
Next
End Sub
立即窗口中的结果将是:
5
5
答案 2 :(得分:0)
我可以在字典中使用嵌套字典而不是数组:
Dim dict As New Scripting.Dictionary, item As Variant
Set dict("a") = New Dictionary
dict("a")(0) = 5
For Each key In dict("a")
Debug.Print dict("a")(key)
Next