Excel-DNA可以选择将您的 .NET 类直接公开给 COM,因此您可以直接从 VBA 将它们用作常规 COM 类。
为此,您的类必须是 ComVisible(或整个程序集必须是 ComVisible),并且您必须在 .dna 文件中将 ExternalLibrary 标记为 ComServer='true',例如:
<DnaLibrary RuntimeVersion='v4.0' />
<ExternalLibrary Path='MyAddIn.dll' ComServer='true' />
</DnaLibrary>
然后您有一些注册选项:调用“Regsvr32.exe MyAddInDna.xll”或在加载项的 AutoOpen 中调用 ExcelDna.Integration.ComServer.RegisterServer()
这两个都设置了注册表项,以便 .xll 文件成为您的类的 COM 服务器。然后,您可以使用 CreateObject("MyNameSpace.MyClass") 从 VBA 访问它们的后期绑定。
您需要另一个步骤来设置类型库(在 VBA 中为您提供智能感知)。为此,您使用 tlbexp.exe 生成类型库。regsvr32 / ComServer.RegisterServer 调用将找到类型库并注册它。
您还可以将 .dll 打包到您的 .xll 文件中(将 pack='true' 属性添加到 ExternalLibrary 标记)并且类型库也将被打包(如果存在),并在您调用时从 .xll 文件中的资源注册Regsvr32.exe
因此,最终结果可能是单个文件 .xll 加载项,它既是带有 UDF、功能区、RTD 服务器的 Excel 加载项,也是可以从 VBA 访问的 COM 服务器。
此处讨论的更多信息: http: //exceldna.codeplex.com/discussions/252721和此处:http ://groups.google.com/group/exceldna/browse_frm/thread/4c5a71efbe96d885 。