在我的代码中,需要在我的key中存储两个值,以便能够进行我需要的分析。由于我不想将所有内容都存储在数组中,因此我决定创建一个具有两个参数的对象。但是,当我使用对象"TwoInputs“作为键类型运行字典的exist函数时,我总是得到键不存在的消息。有谁能帮帮忙吗?
我添加了"Option Compare Text“,以防万一exist仍然返回False。当我逐行运行代码并强制它执行If "true“条件时,仍然创建了一个新的键,我不知道为什么。
这是我创建的类模块:
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然后,我创建了一个sub,如果这两个信息存在,我想将它们添加到一个Key中:
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发布于 2019-01-10 22:39:20
.Exists()方法通过对象的实例而不是字段的值来比较对象。所以最好使用基本类型,如String,Integer,Double等作为键,而不是使用自定义对象作为键。如果你真的需要使用object-key来达到某种目的,那么你必须确保在放入字典的同一对象上调用.Exists()方法(例如,通过将该键存储在全局变量中)。
https://stackoverflow.com/questions/54129986
复制相似问题