词典中的条目都具有相同的值,尽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