Excel VBA:无法将值重新分配给数组

时间:2016-04-18 15:38:23

标签: excel vba

我有循环通过字典的代码。字典中每个键的值是一个2项数组(字典看起来像名称:[string,integer])。 当我稍后引用字典时,我可以在属于字典条目的数组中看到并打印字符串和整数,但是我无法通过正常的赋值来更改整数,如字典(name)(2)= 5 ;在代码中执行此操作后,我将数组值打印到调试文件,并且数组值是原始值,而不是其更改的值。我不知道为什么这不起作用,以及如何让它工作。我在数组上读到的所有内容都说你只需要分配数组(0)=某事。

以下是代码的一部分:

定义原始字典:

dim Dict as Object
Set Dict = CreateObject("Scripting.Dictionary")

for i = 1 to 10
    strnum = "str"&i
    Dict.Add strnum, array("str"&i+1,0) 
next
'printing each item in dict returns "Str1: [str2,0]", etc. as it should

使用字典:

For each Cell in Range("a1:a11")
    If Cell.Value <> "" And Dict.exists(Cell.Value) Then
        name = Cell.Value
        range = Dict(name)(0)
        If Dict(name)(1) = 1 Then
        'we have already located the name here
        Else
            Dict(name)(1) = 1
            s = "Setting the found flag to " & Dict(name)(1)
            debug.print s
            'Dict(name)(1) returns 0 when it should return 1
        end if
    end if
next cell

范围a1:a11是Str1,Str2,Str3,Str4,Str5 ...... Str11。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

您正在使用

创建一些奇怪的别名
for i = 1 to 10
    Str = "str"&i
    arr(1) = "str"&i+1
    arr(2) = 0
    Dict.Add Str, arr
next

因为您在标注arr时只创建了一个数组。

你可以创建一个字典词典来做你想做的事情:

Sub test()

Dim Dict As Object, Str, i, arr
Set Dict = CreateObject("Scripting.Dictionary")


For i = 1 To 10
    Set arr = CreateObject("Scripting.Dictionary")
    arr.Add 1, "str" & i + 1
    arr.Add 2, 0
    Str = "str" & i
    Dict.Add Str, arr
Next

For i = 1 To 10
    Debug.Print (Dict("str" & i)(1))
Next i

Dict("str1")(1) = "Bob"
Debug.Print Dict("str1")(1) 'prints Bob

End Sub