如何在VBA中实现自定义可迭代类

时间:2013-11-25 13:55:46

标签: excel class vba foreach iunknown

我想在我的类中添加一个功能,以便我可以在for-each循环中使用它们。

我写了一些我要迭代的哈希映射,arraylists,队列,集合等等。 现在我正在寻找一种方法来实现IUnknown类来构建自定义迭代器。

我已经知道如何使用

private objPeople as Collection
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
    Set NewEnum = objPeople.[_NewEnum]
End Property

但所有那些例子都基于Collection类,我不想使用它。

我想要关注的是尝试实现IUnknown接口,但我没有找到任何关于如何做到这一点的参考。

我在Java,C ++,C#等方面有丰富的经验,所以我认为即使在VBA中也可以实现这一点,甚至可以使用API​​调用这样的东西。

2 个答案:

答案 0 :(得分:7)

它的长短是you can't implement IUnknownCollection也是如此。它们都是在VBA中不可用于扩展的Com对象。您可以create custom collections并执行其他very cool iterable things

答案 1 :(得分:5)

答案是可以做到的,但是很丑陋(需要和IDL,两个.BAS模块和两个.cls模块(其中一个是您的Collection Class模块) 。 有关完整信息,请参见以下链接:

Create Your Own "Super Collections" in VB

祝你好运!对于我需要做的事情来说,它似乎很复杂,所以现在,我仅遍历Collection对象的枚举器。