词典中的条目都具有相同的值,尽pipe它们是单独创build的
我有一个1:n-Relationship
的excel表
ID value ---------- 1 A 1 B 1 C 2 A 2 B 3 F 4 X 4 Z
和一个对象( CValueMap
),它应该存储给定ID的值:
Option Explicit Public id As Integer Public values As Collection
我通过迭代行读取excel表,创buildCValueMap
(如果它还不存在于我的字典中)并填充值。
Dim idCell As Range Dim allValues As New Scripting.Dictionary allValues.RemoveAll For Each idCell In Range("id_value_table[ID]") If Not allValues.Exists(idCell.value) Then Dim newValueMap As New CValueMap newValueMap.id = idCell.value Set newValueMap.values = New Collection allValues.Add idCell.value, newValueMap End If Dim valueMap As CValueMap Set valueMap = allValues.Item(idCell.value) valueMap.values.Add idCell.Offset(0, 1).value Next idCell
我现在假设我有4个CValueMap
,其中第一个具有ABC
,第二个AB
,第三个F
和最后一个XZ
作为值。 但是,这个代码并不是这样的:
'iterate allValues Dim singleKey as Variant For Each singleKey In allValues.Keys Debug.Print singleKey & " has these values:" Debug.Print "ID: " & allValues.Item(singleKey).id Dim value As Variant For Each value In allValues.Item(singleKey).values Debug.Print " " & value Next value Next singleKey
。
---------------OUTPUT:------------------- 1 has these values: ID: 4 X Z 2 has these values: ID: 4 X Z 3 has these values: ID: 4 X Z 4 has these values: ID: 4 X Z
我不确定我错在哪里。 从行为,我认为相同的 ValueMap可能已被写入allValues
字典中的每个条目,但由于我创build了4个不同的,并正确加载它们之前添加的value
我看不到这可能发生。
对象课程 – 永远不要使用Dim... As New...
因为无法控制何时或如何获得新的对象。
简单的修改你的代码
Dim idCell As Range Dim allValues As Scripting.Dictionary Dim newValueMap As CValueMap Set allValues = New Scripting.Dictionary allValues.RemoveAll For Each idCell In Range("id_value_table[ID]") If Not allValues.Exists(idCell.value) Then Set newValueMap = New CValueMap newValueMap.id = idCell.value Set newValueMap.values = New Collection allValues.Add idCell.value, newValueMap End If Dim valueMap As CValueMap Set valueMap = allValues.Item(idCell.value) valueMap.values.Add idCell.Offset(0, 1).value Next idCell
就在你结束之前如果添加这一行:
Set newValueMap = Nothing