通过键修改值

|
Dim dFeat As Collection
Set dFeat = New Collection

Dim cObj As Collection
Set cObj = New Collection
cObj.Add 3, \"PASSED\"
cObj.Add 4, \"TOTAL\"
dFeat.Add cObj, \"M1\"

Set cObj = New Collection
cObj.Add 5, \"PASSED\"
cObj.Add 6, \"TOTAL\"
dFeat.Add cObj, \"M2\"

dFeat(\"M1\")(\"TOTAL\") = 88 \' Error here
Debug.Print dFeat(\"M1\")(\"TOTAL\")
如何使用键修改内部集合的值?
已邀请:
Alex K.关于使用ѭ1的建议是正确的,但我认为这里的问题比他的回答更笼统。
Collection
键(或该位置的索引位置)仅适合读取,不适合写入。 所以在这一行:
dFeat(\"M1\")(\"TOTAL\") = 88 \' Error here
dFeat(\"M1\")
就可以了。它返回您用键“ M1”添加的“ 2”。发生错误是因为您尝试直接分配给该集合的元素。通常,如果
c
Collection
,则
c(\"TOTAL\")
(或
c(2)
)就不能是左值。 正如Alek K.所说,解决此问题的最佳方法是对内部“集合”或内部和外部使用“ 1”。这是内部使用一个的外观:
Dim d As Dictionary
Set d = New Dictionary

d(\"PASSED\") = 3
d(\"TOTAL\") = 4

dFeat.Add d, \"M1\"
然后一行:
dFeat(\"M1\")(\"TOTAL\") = 88 
将起作用,因为
dFeat(\"M1\")(\"TOTAL\")
是有效的左值。 如果由于某种原因您不想或不想包括MS Scripting Runtime,则必须用类似以下的内容替换失败的行:
Dim c As Collection
Set c = dFeat(\"M1\")

Call c.Remove(\"TOTAL\")
Call c.Add(88, \"TOTAL\")
或更简而言之:
Call dFeat(\"M1\").Remove(\"TOTAL\")
Call dFeat(\"M1\").Add(88, \"TOTAL\")
然后,您可以读取
dFeat(\"M1\")(\"TOTAL\")
的值,但仍无法为其分配值。
您不能更新集合中的值类型。
Dim c as new Collection
c.add 42, \"wth\"
c(\"wth\") = 88 //will error also
添加对Microsoft Scripting运行时的引用,将
Collection
替换为
Dictionary
,它应该可以工作。

要回复问题请先登录注册