在Excel中引用Visual Studio.NET 2008编写的COM组件
最近在研究Office编程,发现了这个领域也是非常非常的有趣,而且,市场也是大大的有.今天遇到的一个课题是:用VS2008编写一个COM组件,并在Excel中用VBA调用这个COM组件实现一些功能.以下是示例代码:
1,创建一个Class Library Project.并编写如下代码(如果选择[New Item]->[Com Class],则不需要定义接口,可以直接对类进行编程,这个类是COM可见的)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
2,编译,使用签名为程序集构建强命名,在项目属性[signing]节,选中[Sign the assembly]复选框,你可以新建key file,也可以使用现有的.强命名对Excel 2007调用来讲,似乎不是必须的,这个可以理解,因为Excel 2007已经内置了对.NET的很多支持.但是如果针对Excel 2000,如果不使用强命名的程序集,你将会看到"自动化错误"(Excel 2003应该也是一样,不过我没有测试过).
3,使用regasm工具对程序集(这里是ClassLibrary1.dll)进行COM组件的注册.如果是Excel 2000/2003的应用,务必使用"/tlb"和"/codebase"选项,有关这两个选项的说明,MSDN上都有,非常详细.
4,对于Excel 2007来讲,这里就可以直接在VBA中使用了.但是如果是Excel 2000/Excel 2003,还需要编辑一个配置文件,内容如下,保存成"Excel.exe.config"文件,并copy到Excel执行文件目录.这是因为Excel 2000/Excel 2003默认支持的运行时不是2.0版.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
5,打开Excel,按下[Alt]+[F11]开始编辑宏.在VBA界面选择[Tools]->[References],选择引用自己刚刚注册的COM组件ClassLibrary1.键入以下VBA代码,保存宏,并在Excel中选择一个单元格,可以看到显示结果.
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
结语:如果是Excel 2007的应用,网上资料很多,Google一下无数条.不过我恰好遇到的客户端是Excel 2000,花了很大力气才找到这个办法.特此记录,希望对自己对别人都有用.