代码之家  ›  专栏  ›  技术社区  ›  Joel Coehoorn

在excel 2007中编写vba以便在excel 2003中使用

  •  7
  • Joel Coehoorn  · 技术社区  · 16 年前

    我所在的开发人员已经更新到Excel2007,但大多数用户还没有。我正在为一个需要包含一些VBA代码的用户构建一个电子表格模板(.xlt),我想知道在2007年而不是2003年构建这个模板可能会遇到什么问题?我无法使用带有excel 2003的机器进行测试,而且我担心这个特定的项目将面临灾难。

    5 回复  |  直到 10 年前
        1
  •  8
  •   billb    16 年前

    VBA语言没有更改,但Office 2007中有其他对象不在Office 2003中。当然,当您试图在2003环境中访问这些项时,这将导致运行时错误。是什么阻止您设置一个使用excel 2003开发的虚拟机?

        2
  •  5
  •   Jon Peltier    16 年前

    最好的做法(mmost relresponsible)不是依赖于添加到excel 2007对象库中的对象和方法的不完整列表,而是始终在可能用于运行代码的最旧版本的excel中开发。

        3
  •  4
  •   Chris Spicer    15 年前

    我发现的一个不同之处是,子例程在菜单(在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(对于excel2003)和usingribbon标志设置为true(对于excel2007),但这比维护两个完全独立的代码基要容易得多。

        4
  •  2
  •   SpyJournal    16 年前

    BillB2112是对的。excel 2007与excel 2003相比有许多不向后兼容的更改。虽然语言可能没有更改,但对象已经更新。有些已经添加了额外的属性,有些工作方式不同,excel中的一些函数已经更改。

    你需要非常小心,你的代码在excel 2003工作。 我建议像billb2112所说的那样,让一个虚拟机不仅可以进行测试,还可以进行编码。我为在2003机器中只有2003的客户开发所有的excel。请注意,如果用户使用的是excel 2002或2000,那么返回时会有更多的差异,您只会在这些旧版本不支持的任何代码上得到运行时错误。

    更新 不幸的是,杰夫斯的回答并不完全正确。是的,VBA语言没有更新,但2007年与2003年不一样。2003年与2002年不一样。 所发生的是额外的和额外的函数以及函数的参数被添加。例如,2003年excel的find函数中有比2002年更多的选项。因此,如果在2003年录制宏(找到这些问题的最佳方法),然后在2002年运行它,则会出现与新参数相关的运行时错误,这些新参数在2002 VBA编辑器中根本不起作用。对excel 2007中已更改的函数执行相同的过程,然后返回到2003进行测试,这将帮助您找到这些问题。一些例子包括条件格式、颜色(主题)和许多新的电子表格功能。 jon peltier从这方面得到了最好的建议-在客户机/用户可能使用的最旧版本中进行开发。 虚拟PC 2007可以免费下载和安装。您只需要一个xp/vista和office的授权副本就可以在其中运行。

        5
  •  -3
  •   Luis    15 年前

    我在2003年以前开发了很多宏,什么POTA,像find,dir之类的东西都不可用或者有什么变化。因此有些错误是可以预料的,我曾经从65000行数到第一个非空行数到要处理的行….现在更多的行意味着更多的工作要做

    推荐文章