您的.NET库可以导出并注册Shampoo
类作为COM可见类型,然后您可以从VBA实例化为Dim sh = New Shampoo()
。类似地,其它类型的可以是限定,像
public class Shopper()
{
public string ReadLabel(Shampoo shampoo)
{
return shampoo.Name;
}
}
然后New Shopper()
可以通过shampoo
:
Dim anne As Shopper = New Shopper()
Dim dove As Shampoo = New Shampoo()
Dim label As String
label = anne.ReadLabel(dove)
使用Shampoo
(以上Shopper.ReadLabel
)不会static
和将不可用的方法Excel作为UDF或任何东西 - 就像通过COM与VBA进行互操作的.NET对象上的方法一样。
到目前为止 - 没有Excel-DNA参与。你可以用一个标准的.NET程序集来完成所有这些工作,该程序集使用正确的标志和属性进行编译,并在您的机器上进行COM互操作注册。
但是,Excel-DNA也允许您的加载项成为COM服务器。这意味着.xll可以托管您在库中定义的COM类,您的加载项可以在不需要管理员访问的情况下进行COM注册(而不是安装程序),并且您的COM对象将与AppDomain一样位于同一AppDomain中剩下的加载项。因此,Excel-DNA有助于粘合某些东西,但是VBA代码和.NET程序集之间的实际交互是标准的.NET到COM互操作,一旦您稍微爬上了学习曲线,它就可以很好地工作。