在我的代码中,需要在我的密钥中存储两个值才能进行我需要的分析。而且由于我不想将所有内容存储在数组中,因此我决定创建一个具有2个参数的对象。但是,当我使用对象“ TwoInputs”作为键的类型运行字典的Exist函数时,我总是得到它们的键不存在。有人可以帮忙吗?
我添加了“ Option Compare Text”,以防万一,但是仍然存在False。 当我逐行运行代码并强制其达到“ true”条件时,仍会创建一个新的Key,不知道为什么。
这是我创建的类模块:
Private acc As Double
Private act As Variant
'Account property
Public Property Get Account() As Double
Account = acc
End Property
Public Property Let Account(Value As Double)
acc = Value
End Property
'Activity property
Public Property Get Activity() As Variant
Activity = act
End Property
Public Property Let Activity(Value As Variant)
act = Value
End Property
在普通模块中,我编写了一个函数,用于基于两个条目创建TwoInputs对象:
Public Function cTwoInputs(Account As Double, Activity As Variant) As TwoInputs
Set cTwoInputs = New TwoInputs
cTwoInputs.Account = Account
cTwoInputs.Activity = Activity
End Function
然后,我创建一个子目录,如果要添加密钥中的2条信息,请在其中添加它们:
While dataSheet.Range("dataAgent").Offset(j, 0).Value <> "Project ID:" And dataSheet.Range("dataAgent").Offset(j, 0).Row <= lRow
If dataSheet.Range("dataAgent").Offset( j, 0).Value = "Activity ID:" Then
actName = dataSheet.Range("dataAgent").Offset(j, 1).Value
End If
If (dataSheet.Range("dataAgent").Offset(j, 0).Value = "XXXXX" Or dataSheet.Range("dataAgent").Offset(j, 0).Value = "") Then
KeyExist.Account = dataSheet.Range("dataAccount").Offset(j , 0).Value
KeyExist.Activity = actName
If dicBudget.Exists(KeyExist) Then
dicBudget(KeyExist) = dicBudget(KeyExist) + dataSheet.Range("dataBudget").Offset(j , 0).Value
Else
dicBudget.Add cTwoInputs(dataSheet.Range("dataAccount").Offset(j, 0).Value, actName), dataSheet.Range("dataBudget").Offset( j, 0).Value
End If
End If
j = j + 1
Wend
答案 0 :(得分:0)
.Exists()方法按实例而不是字段值比较对象。 因此,最好将原始类型(如String,Integer,Double等)用作键,而不要使用自定义对象作为键。如果确实需要出于某种目的使用对象键,则必须确保在放入字典的同一对象上调用.Exists()方法(例如,通过将该键存储在全局变量中)。