2016-04-18 69 views
2

我有通過字典循環的代碼。字典中每個鍵的值是一個2項數組(字典看起來像名稱:[字符串,整數])。 當我稍後參考字典時,我可以看到並打印屬於字典條目的數組中的字符串和整數,但我無法通過字典(name)(2)= 5;在代碼中這樣做後,我將數組值打印到調試文件中,並且數組值是原始值,而不是其更改的值。我不知道爲什麼這不起作用,我怎麼才能使它工作。我在數組上讀到的所有內容都表明你只需分配array(0)= something。Excel VBA:無法重新分配數組值

這裏是下面的代碼的一部分:

定義原來詞典:

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。

我能做些什麼來解決這個問題?

+0

代碼段中的許多錯誤。 (例如 - 在'CreateObject'之前沒有'Set'並且在循環中使用'Add'會導致一個'鍵已經與value'錯誤相關聯)。請發佈實際有效並能可靠複製問題的代碼。 –

+0

更新了代碼。它應該按照現在的規定工作(或不工作)。 – Metalgearmaycry

+0

但'字符串'不是一個有效的VBA變量名稱 –

回答

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 
+0

即使做出這種改變(我不知道Array()函數),問題仍然存在。 – Metalgearmaycry

+0

我已經使用字典和詞典的集合的字典,但從來沒有意識到,製作字典的數組有點棘手。我只會去一本字典詞典。 –

+0

http://stackoverflow.com/questions/2404212/changing-array-values-in-a-vba-dictionary 是對同一主題的答案。 – Metalgearmaycry