在Excel 2007中编写VBA以便在Excel 2003中使用

我在开发者的地方已经更新到Excel 2007,但大部分的用户都没有。 我正在为需要包含vba代码的用户构build一个电子表格模板(* .xlt),我想知道在2007年而不是2003年可能会遇到什么问题? 我没有机会使用Excel 2003进行testing,我担心这个特定的项目正在发生灾难。

VBA语言没有改变,但在Office 2007中还有其他对象不在Office 2003中。当然,当您尝试在2003环境中访问这些项目时,这会导致运行时错误。 什么阻止你设置一个虚拟机与Excel 2003开发下?

最好的(可以重写的)练习总是在可能用于运行代码的最老版本的Excel中进行开发,而不是依赖于已添加到Excel 2007对象库中的大概不完整的对象和方法列表。

我发现的一个区别是子程序必须有一个不同的签名才能从菜单中调用(在Excel 2003中),而不是从function区中调用(在Excel 2007中)。 此外,Excel 2003不能识别IRibbonControl并引发编译错误。

为了处理跨版本兼容性问题,我使用了条件编译参数,然后检查预处理器macros。

例如

#If USINGRIBBON Then Public Sub CallFromRibbon(control As IRibbonControl) #Else Public Sub CallFromRibbon() #End If ' Code here End Sub 

这意味着你必须保存一个版本的加载项,USINGRIBBON标志设置为false(对于Excel2003),另一个版本的USINGRIBBON标志设置为true(对于Excel2007),但这比保持两个完全分离要容易得多代码库。

billb2112是正确的。 与Excel 2003相比,Excel 2007有许多更改并不向后兼容。 虽然语言可能没有改变,但对象已被更新。 有些已经添加了额外的属性,有些工作不同,Excel中的一些function已经改变。

你需要非常小心,你的代码在Excel 2003中工作。我会build议,因为billb2112说,你得到一个虚拟机,不仅testing,而且代码英寸我做所有的Excel开发客户谁只有2003在2003年的机器。 请注意,如果用户使用Excel 2002或2000,则返回时会有更多差异,您只会在这些较旧版本不支持的任何代码上获得运行时错误。

更新不幸jeffs的答案是不正确的。 而vba语言没有更新,2007年与2003年不一样,2003年与2003年不一样,所发生的是额外的function和附加的function。 例如,2003年Excel中的FIND函数中有更多的选项比2002年更多。因此,如果在2003年录制一个macros(find这些问题的最好方法),然后在2002年运行它,那么将会运行与新的论点,在2002年VBA编辑器根本不起作用。 按照相同的过程,在Excel 2007中更改的function,然后回到2003testing将帮助您find这些问题。 一些例子包括条件格式,颜色(主题)和许多新的电子表格function。 jon peltier从这方面得到了最好的build议 – 在客户/用户使用的最早版本中开发。 Virtual PC 2007可以免费下载和安装。 你只需要一个XP / Vista和办公室的授权副本来安装在其中运行。

我曾经在2003年开发过很多macros,POTA是什么,像Find,Dir和其他一些东西是不可用的,或者是有什么改变。 因此可以预料到一些错误,我曾经从65000行计数到第一个非空行来计算要处理的行….现在,更多的行意味着更多的工作要做