在Excel 2007中编写VBA,以在Excel 2003中使用
问题的出现原因是Excel 2003与Excel 2007在调用菜单和调用功能区时,子程序的签名要求不同。另外,Excel 2003无法识别IRibbonControl并会抛出编译错误。
为了实现跨版本的兼容性,可以使用条件编译参数,并在预处理宏中进行检查。
例如:
#If USINGRIBBON Then
Public Sub CallFromRibbon(control As IRibbonControl)
#Else
Public Sub CallFromRibbon()
#End If
' Code here
End Sub
这意味着你需要保存两个版本的插件,一个版本的USINGRIBBON标志设置为false(适用于Excel 2003),另一个版本的USINGRIBBON标志设置为true(适用于Excel 2007)。但这比维护两个完全不同的代码库要容易得多。
问题的原因是作者没有使用Excel 2003来开发代码,而是在Excel 2007中开发代码。这导致了无法使用Excel 2003中存在的对象和方法,因为Excel 2007中的对象库可能不完整。
解决方法是始终使用可能用于运行代码的最旧版本的Excel来开发代码。然而,作者没有这个选项。
这是最佳答案,因为它正确地指出任何列表可能都至少部分不完整,并且与VM答案很好地结合在一起。
由于没有代码,文章内容如下:
本文讨论了在Excel 2007中编写VBA代码以供Excel 2003使用的问题。作者建议始终使用可能用于运行代码的最旧版本的Excel来开发代码,以避免在较新版本中缺少对象和方法的问题。然而,作者没有在Excel 2003中开发代码的选择。这个问题的最佳解决方法是意识到任何列表都可能至少部分不完整,并且与VM答案紧密相关。
在Excel 2007中编写VBA代码,并在Excel 2003中使用时会出现问题。虽然VBA语言本身没有改变,但在Office 2007中引入了一些在Office 2003中不存在的对象。当您尝试在2003环境中访问这些对象时,自然会引发运行时错误。那么,为什么不使用Excel 2003创建一个虚拟机来进行开发呢?
我在这里无法进行任何虚拟机的工作。如果你可以给我提供一个附加对象的列表,这样我就可以知道要避免使用它们,那就太好了。
解决方法:
1. 使用Excel 2003创建一个虚拟机环境来进行开发。
2. 避免使用Office 2007中的额外对象,可以通过查看相关文档或向其他开发人员咨询来获取这些对象的列表。
3. 在编写代码时,可以使用条件语句来检查当前Excel版本,并根据所使用的版本来决定是否访问这些额外的对象。例如:
If Application.Version >= 12 Then ' Access Office 2007 objects ' ... Else ' Access Office 2003 objects ' ... End If
通过这种方式,可以在不同的Excel版本中运行相同的代码,避免运行时错误。
在使用Excel 2007编写VBA代码时,要注意在Excel 2003中使用可能会出现运行时错误的额外对象。解决方法可以是创建一个Excel 2003的虚拟机环境来进行开发,或者避免使用这些额外的对象,并使用条件语句根据Excel版本来决定是否访问它们。这样可以确保代码在不同版本的Excel中都能运行正常。