如何从VBA在.net ArrayList中查找文字数字?



.net 运行时通过 mscorlib.dll 向 VBA(和其他 COM 客户端(公开。 从理论上讲,这意味着 VBA 程序员可以使用 .net 类。

我使用 ArrayList 进行排序,并尝试调用其他方法,但对于 IndexOf,我遇到了一个问题。 它不需要参数的文字,它期待一个对象。 我想也许一个带盒的整数可能会起作用,但这也失败了。

那么如何从VBA在ArrayList中查找文字数字呢?

Sub Test()
Dim obj As Object
Set obj = CreateObject("System.Collections.ArrayList")
obj.Add 4
obj.Add 8
obj.Add 12
obj.Add 16
obj.Add 20
Debug.Assert obj.Count() = 5
Debug.Assert obj.Item(2) = 12
'* try a literal
Debug.Print obj.IndexOf(12) 'ERRORS err.Description=Invalid procedure call or argument
'* try a boxed integer
Dim boxedInteger As mscorlib.Int32
boxedInteger.m_value = 12
Debug.Print obj.IndexOf(boxedInteger) 'ERRORS err.Description=Invalid procedure call or argument
End Sub

添加参数 0

Debug.Print obj.IndexOf(12, 0)

索引

属性.IndexOf指示 数组列表中的项。

第一个参数是您要查找的值,第二个参数是 要检查值是否存在的位置


上面的链接定义是第二个参数行为在之后,而实际上它从开始。网站作者正在更新以反映这一点。这与重载方法 IndexOf(Object, Int32( 一致,就第二个参数而言:

返回区域内第一个匹配项的从零开始的索引 数组列表中从指定索引扩展到 最后一个元素。

例如,Debug.Print obj.IndexOf(4, 0)将正确返回0。 我会对一些涵盖这种行为的文档感兴趣,其中显然对象不是作为第一个 agument 传递的。我还没有找到。

最新更新