将Excel 2003和2007引用到Autocad-VBA项目中

我正在为AutoCAD编写一个VBA(Visual Basic for Applications)脚本。 它使用Autocad作为graphics引擎和Excel来显示结果….

问题是,有些用户正在使用Excel 2003,另一个正在使用Excel 2007。

要使用VBA中的Excel 2003,必须将C:\Program Files\Microsoft office\Office12\excel.exe引用到项目中。 但要使用Excel 2007,我必须引用...\Office14\excel.exe

对于不知道的人,有什么参考是: 它必须在项目属性中永久完成,所以我不能以编程方式决定哪两个文件存在于计算机中,并在运行时引用它们。我只是不知道,怎么样?

我甚至无法一次引用这两个文件,因为它们具有相同的文件名。

您将需要使用后期绑定(IDispatch)。 通过调用VBA的CreateObject方法来创buildExcel应用程序对象。 这将使用任何版本的安装。

使用后期绑定,你将不会有智能感知的便利。

不同版本的Excel具有不同的function,在某些情况下甚至可以以不同的方式实现相同的function。 所以一定要对两个版本进行testing。 在某些地方,您可能需要针对不同版本使用不同的代码。

您需要延迟绑定,即不参考,将所有声明都声明为“对象”,并使用CreateObject来实例化实例。

这并不难,因为你可以用(早期边界)的引用进行编码,然后只是改变variables声明并删除引用。 由于不同版本的问题,针对excel进行编码时相当普遍。

请注意,您应该针对两种版本之间API或function行为的变化进行彻底testing。

如果您正在为AutoCAD编写新代码,我会认真考虑转到.NET。 Autodesk正在逐步取消对VBA的支持 – 它还没有被自动包含在AutoCAD的最新版本2(即将到来的版本)中: http : //withoutanet.typepad.com/without_a_net/2009/04/vba-in-autocad -2010.html

随着用户更新到更新的版本,他们使用VBA附加软件将会产生更多的摩擦。 由于大量的AutoCAD命令都是用这些语言编写的,因此LISP和ARX在未来的几年内不会有任何进展。

即使你正在维护现有的代码,我认为你应该认真地转移到AutoCAD将在不久的将来支持的技术。 我有很多我在VBA中写的工具,我已经停止了(读取 – 放弃),现在正在用.NET重写。 从VBA到VB的飞跃并不是一个量子问题。 就个人而言,我现在更喜欢C#,但这是一个完全个人的select。 这些语言在function上是相同的。 在上面的链接上有几个链接指向迁移指南,在http://through-the-interface.typepad.com/through_the_interface/2010/02/updated-devtv-autocad-vba-to-vbnet-migration-basics上。 HTML 。 作为一个奖励,这些技能在AutoCAD开发之外将比以后的VBA更有价值。

.NET代码也受到ODA的支持,因此使用它们的库将AutoCAD加载项移植到独立的应用程序是非常简单的。

此外,这可以解决您的问题 – 引用可以在Visual Studio .NET项目中以编程方式进行pipe理。