excel - 在我的 VB6 项目中将 Excel 2003 的引用替换为 Excel 2010

标签 excel vb6 early-binding

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

运行应用程序时,我收到“Microsoft Excel 10.0 对象库”丢失的错误。确实如此,因为此计算机上仅安装了 Excel 2010,不再安装 Excel 2003。

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

有什么建议吗?

谢谢。

最佳答案

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

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

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

例如:

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

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

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

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

关于excel - 在我的 VB6 项目中将 Excel 2003 的引用替换为 Excel 2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265247/

相关文章:

vba - Excel 2007 VBA 计算错误

vba - 当某些条件为真时退出 'For Each' 循环

c# - CRM 2011 获取没有早期绑定(bind)类型的自定义实体记录属性

java - Java 中的绑定(bind)和调度有什么区别?

c# - 在 C# 中填充列表框

unicode - 如何在VB6中显示Unicode字符?

vb6 - 如何从vb6中的整数值中删除最后一个字符

vb6 - 管理软件的演示版本

sdk - CRM 2011 SDK 交易

excel - 限制 Excel 中的自定形移动