确定对象是否为VBA中集合的成员
时间:2020-03-06 14:45:59 来源:igfitidea点击:
如何确定对象是否是VBA中集合的成员?
具体来说,我需要找出一个表定义是否是TableDefs集合的成员。
解决方案
最好的选择是遍历集合中的成员,然后查看是否与我们要查找的内容匹配。相信我,我已经做过很多次了。
第二种解决方案(更糟糕的是)是捕获"项目不在集合中"错误,然后设置一个标志以表明该项目不存在。
在特定情况下(TableDefs),遍历集合并检查Name是一个好方法。可以,因为集合的键(名称)是集合中类的属性。
但是在VBA集合的一般情况下,键不一定是集合中对象的一部分(例如,我们可以将集合用作字典,而键与集合中的对象无关)。在这种情况下,我们别无选择,只能尝试访问该项目并捕获错误。
并不是很优雅,但是我能找到的最好的(也是最快的)解决方案是使用OnError。对于任何大中型集合,这将比迭代快得多。
Public Function InCollection(col As Collection, key As String) As Boolean Dim var As Variant Dim errNumber As Long InCollection = False Set var = Nothing Err.Clear On Error Resume Next var = col.Item(key) errNumber = CLng(Err.Number) On Error GoTo 0 '5 is not in, 0 and 438 represent incollection If errNumber = 5 Then ' it is 5 if not in collection InCollection = False Else InCollection = True End If End Function
不够好吗?
Public Function Contains(col As Collection, key As Variant) As Boolean Dim obj As Variant On Error GoTo err Contains = True obj = col(key) Exit Function err: Contains = False End Function