【问题标题】:Replacing reference of Excel 2003 to Excel 2010 in my VB6 project在我的 VB6 项目中将 Excel 2003 的引用替换为 Excel 2010
【发布时间】:2012-06-29 16:06:23
【问题描述】:

我有一个运行多年的 VB6 应用程序。此应用程序过去总是参考 Excel 2003 来创建 XLS 文件。现在我们想用 Excel 2010 代替 2003。所以我在单独的开发计算机上只安装了 Excel 2010 并加载了我的 vb6 项目。

在运行应用程序时,我收到了缺少“Microsoft Excel 10.0 对象库”的错误。这是真的,因为这台计算机上只安装了 Excel 2010,而不再安装 Excel 2003。

问题是,当我想要正确的参考时,我没有找到任何“Microsoft Excel 14.0 对象库”或替代此参考的等效内容。

有什么建议吗?

谢谢。

【问题讨论】:

  • Works for me。尝试重新安装。
  • 14 应该与 10 向后兼容。不是 64 位版本的 office 吗?
  • 14 向后兼容 10,好的,但我需要在我的项目中引用一些东西才能使 Excel 可用。
  • 后期绑定?然后我不得不更改很多代码。我更愿意参考应有的 Excel 14.0。
  • 只需搜索并将As Excel.Application 替换为As Object,仅此而已。那么谁的电脑上的 Excel 版本无关紧要。

标签: excel vb6 early-binding


【解决方案1】:

早期绑定引用是“绑定”的(请原谅双关语),这会导致分发给具有不同 Excel 版本的用户的应用程序出现问题。

对您愿意支持的最早版本的 Excel 使用后期绑定和编码是解决方案。例如,如果您支持 Excel 2000,那么您的应用程序将只使用 Excel 2000 支持的方法。

但是,如果您的代码是后期绑定的,您可以使用不明确的方法调用并检测本地版本来确定要运行的代码。

例如:

Dim excelVersion As Long  
Dim xl As Object

' get a reference to Excel.Application maybe from AddinInstance_OnConnection()?  
excelVersion = Val(xl.Version)

Select Case excelVersion 
Case 11 ' Excel 2003
  ' Excel 2003-only methods here
  ' ex: xl.FileSearch
Case 12 ' Excel 2007
  ' Excel 2007-only methods here
Case 14 ' Excel 2010
  ' Excel 2010-only methods here
  ' ex: something with Slicers
End Select

由于代码是后期绑定的(即从 Object 派生),我可以指定仅在 Excel 2010 中有效的方法,并且代码仍然可以编译。如果代码早期绑定到 Excel 2003,它将无法编译。在运行时,我确定版本以决定使用哪些方法。

如果您使用 Excel 2010 特定的功能,您也可以考虑编译不同版本的应用程序。只有你自己知道这是否可能。

另外,我在写完这个答案后想到了这一点,但是你不能在你的应用程序中引用 Excel 2010,如果它安装在具有早期版本 Excel 的计算机上,引用不会自动调整到任何版本Excel 安装了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多