我很惊讶这是多么艰难,但我想这是一个快速修复,所以我会在这里问(搜索谷歌和文档,但没有帮助).我有一些代码使用键将项添加到集合中.当我遇到集合中已存在的密钥时,我只想通过在当前值中添加一个数字来设置它.
这是代码:
If CollectionItemExists(aKey, aColl) Then 'If key already has a value
'add value to existing item
aColl(aKey).Item = aColl(aKey) + someValue
Else
'add a new item to the collection (aka a new key/value pair)
mwTable_ISO_DA.Add someValue, aKey
End If
Run Code Online (Sandbox Code Playgroud)
我第一次将键/值对添加到集合中时,我添加了一个整数作为值.当我再次遇到密钥时,我尝试向该值添加另一个整数,但这不起作用.我不认为问题在于任何类型的对象不匹配或类似的东西.我目前得到的错误信息是
运行时错误424:对象必需
Jea*_*ett 16
将值添加到集合后,您无法对其进行编辑.所以这是不可能的:
aColl.Item(aKey) = aColl.Item(aKey) + someValue
Run Code Online (Sandbox Code Playgroud)
相反,您可以将对象从集合中取出,编辑其值,然后将其添加回来.
temp = aColl.Item(aKey)
aColl.Remove aKey
aColl.Add temp + someValue, aKey
Run Code Online (Sandbox Code Playgroud)
这有点单调乏味,但将这三行放在Sub中,你就完成了.
当集合用作对象的容器时(与整数,双精度等"原始"变量的容器相对),集合更加友好.您无法更改集合中包含的对象引用,但可以操作附加到该引用的对象.
另外,我认为你误解了与之相关的语法Item.你不能说:aColl(aKey).Item.正确的语法是aColl.Item(aKey),或者,简而言之,aColl(aKey)因为它Item是Collection对象的默认方法.但是,我更喜欢使用完整,明确的形式......
bre*_*tdj 10
Dictionaries更通用,更节省时间Collections.如果你走这条路线,你可以Exists直接在下面的字典上运行一个简单的测试,然后更新键值
Patrick Matthews撰写了一篇关于字典v集的精彩文章
Sub Test()
Dim MyDict
Set MyDict = CreateObject("scripting.dictionary")
MyDict.Add "apples", 10
If MyDict.exists("apples") Then MyDict.Item("apples") = MyDict.Item("apples") + 20
MsgBox MyDict.Item("apples")
End Sub
Run Code Online (Sandbox Code Playgroud)