首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典中的Exist函数不适用于作为类模块中创建的键的对象

字典中的Exist函数不适用于作为类模块中创建的键的对象
EN

Stack Overflow用户
提问于 2019-01-10 21:40:43
回答 1查看 145关注 0票数 1

在我的代码中,需要在我的key中存储两个值,以便能够进行我需要的分析。由于我不想将所有内容都存储在数组中,因此我决定创建一个具有两个参数的对象。但是,当我使用对象"TwoInputs“作为键类型运行字典的exist函数时,我总是得到键不存在的消息。有谁能帮帮忙吗?

我添加了"Option Compare Text“,以防万一exist仍然返回False。当我逐行运行代码并强制它执行If "true“条件时,仍然创建了一个新的键,我不知道为什么。

这是我创建的类模块:

代码语言:javascript
复制
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对象的函数:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-01-10 22:39:20

.Exists()方法通过对象的实例而不是字段的值来比较对象。所以最好使用基本类型,如String,Integer,Double等作为键,而不是使用自定义对象作为键。如果你真的需要使用object-key来达到某种目的,那么你必须确保在放入字典的同一对象上调用.Exists()方法(例如,通过将该键存储在全局变量中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54129986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档