我的代码中有不同的集合。有些保存对象(各种),另一些保存其中的类型(如Long)。
有没有一种方法可以检查键是否包含在适用于类型和对象的Collection中?
到目前为止,我有两个功能。
第一个功能:
Private Function ContainsObject(objCollection As Object, strName As String) As Boolean
Dim o As Object
On Error Resume Next
Set o = objCollection(strName)
ContainsObject = (Err.Number = 0)
Err.Clear
End Function
第二功能:
Private Function ContainsLong(AllItems As Collection, TheKey As String) As Boolean
Dim TheValue As Long
On Error Resume Next
TheValue = AllItems.Item(TheKey)
ContainsLong = (Err.Number = 0)
Err.Clear
End Function
这两个函数的原因是,如果我传递具有Longs对的Collection,则ContainsObject似乎不起作用(该函数始终返回False。)
PS:第一个功能是“测试”中第三个答案的副本,或者检查是否存在工作表
您应该Variant
在第一个函数中使用a 。您可以将分配Object
给Variant
,例如,这不会出错:
Sub Test()
Dim var As Variant
Dim obj As Object
Set obj = Application
var = Application
Debug.Print var
End Sub
但这会产生Type Mismatch
编译错误,即尝试将a分配Long
给Object
:
Sub Test()
Dim obj As Object
Dim lng As Long
lng = 3
Set obj = lng
End Sub
因此,对于用于检查Collection
键是否有效的泛型函数(沿代码行),可以使用:
Function HasKey(coll As Collection, strKey As String) As Boolean
Dim var As Variant
On Error Resume Next
var = coll(strKey)
HasKey = (Err.Number = 0)
Err.Clear
End Function
测试代码:
Sub Test()
Dim coll1 As New Collection
coll1.Add Item:=Sheet1.Range("A1"), Key:="1"
coll1.Add Item:=Sheet1.Range("A2"), Key:="2"
Debug.Print HasKey(coll1, "1")
Dim coll2 As New Collection
coll2.Add Item:=1, Key:="1"
coll2.Add Item:=2, Key:="2"
Debug.Print HasKey(coll2, "1")
End Sub
关于此,在MSDN上有一篇有用的文章。上下文是VB6,但与VBA有关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句