vb.net - 使用 VB.NET 创建能够进行每次循环的 COM 类

标签 vb.net excel com

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

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

指定一位:

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

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

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

最佳答案

一般来说,您需要实现一个 COM 可见类,该类公开带有签名 IEnumerator GetEnumerator() 的方法,并用 DISPID 标记为 -4(即 DISPID_NEWENUM)

explained in more details here

关于vb.net - 使用 VB.NET 创建能够进行每次循环的 COM 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598597/

相关文章:

mysql - Vb.Net 使用组合框过滤 Datagridview

javascript - 使用 getJSON 返回 Excel 电子表格

vba - Excel VBA 函数出现 #VALUE 错误

java - 使用 JRE 7 或 JRE 8 创建 dll 的过程

c# - 找出哪些接口(interface)对于 COM 对象是可查询的?

vb.net - C# readonly 关键字在 VB.NET 中的等效项是什么?

vb.net - 检测操作系统

vb.net - 在vb中禁用回车键选择按钮

html - Excel VBA 代码 - 修改以获取不同页面中的其他表格?

c++ - visual c++ 项目中的#define _WIN32_DCOM a 是什么?