2

我正在为 AutoCAD 编写 VBA(Visual Basic for Applications)脚本。它使用 Autocad 作为图形引擎,使用 Excel 来显示结果......

问题是,一些用户使用 Excel 2003,而其他用户使用 Excel 2007。

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

对于不知道什么是引用的人:它必须在项目属性中永久完成,所以我无法以编程方式确定这两个文件中的哪一个确实存在于计算机中并在运行时引用它们......或者也许我就是不知道,怎么办?

我什至不能同时引用这两个文件,因为它们具有相同的文件名。

4

3 回答 3

3

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

使用后期绑定,您将无法享受 IntelliSense 带来的便利。

不同版本的 Excel 具有不同的功能,在某些情况下甚至以不同的方式实现相同的功能。因此,请务必针对这两个版本进行测试。在某些地方,您可能必须为不同的版本使用不同的代码。

于 2011-03-18T12:38:50.200 回答
2

您需要后期绑定,即不引用任何内容,将所有内容声明为“对象”并使用 CreateObject 实例化实例。

这并不难,因为您可以使用(早期绑定)中的引用进行编码,然后只需更改变量声明并删除引用。由于版本不同的问题,在针对 excel 进行编码时,它很常见。

请注意,如果版本之间的 API 或功能行为发生变化,您应该对两者进行彻底测试。

于 2011-03-18T12:34:39.953 回答
1

如果您正在为 AutoCAD 编写新代码,我会认真考虑使用 .NET。Autodesk 正在逐步取消对 VBA 的支持 - 它并未自动包含在 AutoCAD 的最后 2 个(即将成为 3 个)版本中:http ://withoutanet.typepad.com/without_a_net/2009/04/vba-in-autocad -2010.html

随着用户更新到较新的版本,他们在使用 VBA 附加组件时会遇到更多的摩擦。LISP 和 ARX 在未来几年内不会有任何进展,因为很多 AutoCAD 命令都是用这些语言编写的。

即使您正在维护现有代码,我认为您也应该认真努力迁移到 AutoCAD 将在不久的将来支持的技术。我有很多我在 VBA 中编写的工具,我已经停止维护(读取 - 放弃)并且现在正在用 .NET 重写。从 VBA 到 VB 的飞跃不是一个量子飞跃。就个人而言,我现在更喜欢 C#,但这完全是个人选择。这些语言在功能上是等效的。在上面的链接和http://through-the-interface.typepad.com/through_the_interface/2010/02/updated-devtv-autocad-vba-to-vbnet-migration-basics上有一些迁移指南的链接。 .html _ 作为奖励,这些技能在未来和现在在 AutoCAD 开发之外比 VBA 更有价值。

ODA 也支持 .NET 代码,因此使用其库将 AutoCAD 附加组件移植到独立应用程序(有点)简单。

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

于 2011-03-20T09:58:28.360 回答