Excel / VBA在我工作的组织中得到了非常广泛的使用。为了使事情变得更容易,我正在研究.NET / VS2010中一些广泛使用的COM类,以便在VBA中使用。
但是我似乎无法实现支持每个循环的COM对象。如何实现这种行为?
指定一个位:
在很多情况下,我会创建一些类(让我们称之为SomeClass)和一个附带的专用集合类(让我们称之为SomeClassCollection)。在纯.NET中,这通常是不必要的,因为我可以简单地为通用容器创建必要的专用扩展(例如List(Of SomeClass))。但是在VBA / COM中,我需要为大多数自定义类创建一个单独的专用集合类。
对我来说,创建SomeClassCollection COM兼容对象最明显的方法是继承一些通用的.NET集合,例如:列表(Of SomeClass)然后创建添加专用函数以及使基本函数和属性COM可见(例如添加,删除,计数等)
因为我继承了一个.NET集合,其中支持每个集合(在.NET中),我认为有可能以某种方式将此功能转移到COM集合类(参见Worksheets,Workbooks) Excel中支持每个的集合。)
答案 0 :(得分:3)
通常,您需要实现一个COM可见类,该类公开一个带有签名IEnumerator GetEnumerator()
的方法,并将其标记为DISPID为-4(即DISPID_NEWENUM)