Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VB.NET创建一个COM类,能够为每个循环_Vb.net_Excel_Com - Fatal编程技术网

使用VB.NET创建一个COM类,能够为每个循环

使用VB.NET创建一个COM类,能够为每个循环,vb.net,excel,com,Vb.net,Excel,Com,Excel/VBA在我工作的组织中使用得非常广泛。为了让事情变得简单一点,我正在.NET/VS2010中开发一些广泛可用的COM类,以便在VBA中使用 但是,我似乎无法实现支持每个循环的COM对象。如何实现这种行为 要指定位,请执行以下操作: 在许多情况下,我将创建一些类(我们称之为SomeClass)和一个附带的专门集合类(我们称之为SomeClassCollection)。在纯.NET中,这通常是不必要的,因为我可以简单地为一个通用容器(例如(SomeClass的)列表)创建必要的专用扩展。

Excel/VBA在我工作的组织中使用得非常广泛。为了让事情变得简单一点,我正在.NET/VS2010中开发一些广泛可用的COM类,以便在VBA中使用

但是,我似乎无法实现支持每个循环的COM对象。如何实现这种行为

要指定位,请执行以下操作:

在许多情况下,我将创建一些类(我们称之为SomeClass)和一个附带的专门集合类(我们称之为SomeClassCollection)。在纯.NET中,这通常是不必要的,因为我可以简单地为一个通用容器(例如(SomeClass的)列表)创建必要的专用扩展。但是,在VBA/COM中,我需要为大多数自定义类创建单独的专用集合类

对我来说,创建SomeClassCollection COM兼容对象最明显的方法是继承一些通用的.NET集合,例如(SomeClass的)列表,然后创建添加专用函数以及使基本函数和属性COM可见(例如添加、删除、计数等)


因为我继承了一个.NET集合,其中支持for each(在.NET中),所以我认为可以通过某种方式将此功能转移到COM集合类(参见Excel中支持for each的工作表、工作簿等集合)。

通常,您需要实现一个COM可见类,该类公开一个签名为
IEnumerator GetEnumerator()
的方法,并用DISPID为-4(即DISPID\u NEWENUM)标记它

是的