了解 Office 2010 对象模型中可能有影响的更改
原文发布于 2011 年 9 月 9 日(星期五)
由我们的兼容性专家 Curtis Sawin 提供
迁移到 Office 2010 的挑战之一是评估 Office 应用程序中的对象模型更改的影响。IT 专业人员和开发人员担心使用以前版本的 Excel(举例来说)构建的宏在 Excel 2010 中不起作用,因为对象模型的变化太大。当您查看 MSDN 上最新版本的 Office 2010 应用程序与其 Office 2007、2003、XP 和 2000 相应程序之间的对象模型差别的完整列表(请参阅本文末尾的链接)时,会发现损坏的宏似乎是不可避免的。但是,大多数更改都是不具影响力的更改,不会对宏产生任何影响。“大多数”意味着什么呢?下面是总结:
- Excel 2010、Word 2010、PowerPoint 2010、Outlook 2010 和 Access 2010 的组合对象模型中有超过 22,000 个项目(属性、方法和常量)
- 对象模型中有 2,134 项更改
- 有 49 项可能有影响的更改
49 项可能有影响的更改。在 5 个应用程序中。跨越 4 个以前的版本。基本情况就是这样!下图总结了我们的发现:
本文介绍我们所说的不具影响力的更改和可能有影响的更改的含义。 注意 :我们提供了一个表,其中列出了所有可能有影响的更改,以供将来参考。该表还以 .pdf 文件的形式附在本文末尾。
MSDN 文档提供了每个 Office 2010 应用程序的对象模型中的所有更改。对这些更改进行了组织,以使每个早期 Office 版本都列出已更改、已移除或已废弃的所有方法或属性。
例如,对于 Excel 2010,对象模型中有近 900 个项目与以前的版本不同。乍看之下,这似乎是个可怕的巨大数字。MSDN 文章自早期版本以来的 Excel 2010 对象模型更改(该链接可能指向英文页面)列出了所有这些已更改的项目。这篇文章包含大约 90 个打印页。
这些更改的大多数都是已废弃(也列为隐藏)项目。那么,什么是“已废弃项目”?它对宏有哪些影响?如果某项被列为已废弃,则意味着您不会在将来版本的 Office 中将其视为可用,并且您应计划在将来更新代码。但是,已废弃项目仍然起作用!因此,如果您有为以前版本的 Office 构建的宏代码,并且它包含已废弃方法、属性或常量,则不必采取操作以使那些项目在 Office 2010 中起作用。没有必要。在这近 900 个已更改项目(确切地说是 882 个)中,794 个项目是已废弃项目。这意味着如果您的宏中有那些项目,则 Excel 对象模型中的 900 个更改中有近 800 个不会造成任何影响。
所以您可推迟处理已废弃项目,但不应完全忽视它们。应复查和更新包含此类项目的代码,以确保现在的已废弃代码不会变成将来的已损坏代码。
“已移除”项目是大问题。列为已移除的项目不再位于 Office 2010 对象模型中。如果您现在有一个包含已从 Office 2010 中移除的项目的宏,则该宏不起作用。对于 Excel 2010,自以前的版本以来,共移除了 9 个对象模型项目。您应重点注意这些项目。替换它们。
“已更改”项目是自早期版本以来更改的方法和属性。例如,更改的方法可能会返回不同的数据类型,或者属性可能已从“只读”更改为“读/写”。进行一些分析后我们发现,多数已更改项目都涉及接受其他可选参数的方法或属性。例如,在 Excel 2003 中,ListRows.Add(该链接可能指向英文页面) 方法提供了一个可选参数。在 Excel 2010 中,它提供了两个可选参数。添加可选参数不会对其使用造成任何影响。如果在 Excel 2003 中使用了此方法,并且只提供了一个参数,则相同的代码将在 Excel 2010 中起作用,而不需要进行任何修改。
在 Excel 2010 中,有 97 个已更改项目。这些项目可能都不会产生影响。对这些项目进行的所有更改都不会影响包含“已更改”项目的现有代码。
所以,在不同于 4 个以前版本的 Excel 的 882 个方法和属性中,只有 9 个将会产生影响。
并非所有已更改项目都不会产生影响。例如在 PowerPoint 中,Presentation.SaveAs 方法对可选参数 FileFormat 使用了不同的默认值。该默认值从 PowerPoint 2003 中的“1”(ppSaveAsPresentation) 更改为 PowerPoint 2010 中的“11”(ppSaveAsDefault)。因此,如果您要使用此方法,并且不会为 FileFormat 参数明确提供值,则运行 PowerPoint 2003 中内置的宏得到的结果可能不同于运行 PowerPoint 2010 中内置的宏。所以,该更改可能会有影响,具体取决于您使用此方法的方式。
诸如 Office 代码兼容性检查工具 (OCCI)(该链接可能指向英文页面) 的工具可用于扫描宏,以查看它们是否包含自以前版本以来发生更改的代码。OCCI 将向您提供一个报告,其中列出已更改、已废弃或已移除的项目数。它还会指出您是否使用了任何外部引用(当您将 Office 2010 作为操作系统升级的一部分进行迁移时尤其重要),以及您是否进行了任何未在 64 位 Office 环境中明确标记为起作用的声明。下面是 OCCI 在包含宏的 Excel 工作簿上的发现摘要的屏幕截图。
注意,OCCI 使用与“已移除”相对应的术语“重新设计”。(我也不知道这有什么区别。)
由于 OCCI 会选择所有更改,因此您必须对输出进行整理,以便确定哪些信息是“可操作的”。这就是说,OCCI 会告诉您“发生了更改”,但需要立即修复哪些更改?需要逐步修复哪些更改?OCCI 不会提供这种深层信息。下表旨在解决该问题。它列出了所有可能有影响的更改;需要立即评估的更改。包含这些项目的代码可能不需要任何修改,具体取决于它们的使用方式。所以请将此表视为解决任何宏问题的“快速入门”指南。但不要过分依赖任何工具,甚至是下面的表。多说一句,执行宏以确定它们是否起作用是确定它们是否起作用的唯一可信方法。
下表列出所有此类可能有影响的更改,包括所有已移除项目和所有可能有影响的已更改项目。使用此表可快速识别您使用的可能是此表中的哪个代码。虽然您可使用诸如 OCCI 的工具来检测所有更改,但此表去除了在将宏迁移到 Office 2010 时不会有任何影响的对象模型更改,从而提供了可操作性(和可使用性)更强的数据。
依赖工具的难题之一是它们通常提供帮助回答技术问题(如“发生了哪些更改”)而非业务问题(如“此更改对我的解决方案的影响是什么”)的数据。工具当然能够帮助自动化和加快进行疑难解答工作,但过分依赖工具会导致使用工具提供的数据来回答错误的问题。和往常一样,确保您的解决方案在升级到 Office 2010 时起作用的最佳方法是执行最终用户测试,该测试涉及真正使用该解决方案(在测试环境中,如果可能)。
(您可单击本文末尾的 .pdf 的链接以 .pdf 文件格式下载上面的表。)
下面的链接提供各个对象模型的差别。
- 自早期版本以来的 Access 2010 对象模型更改(该链接可能指向英文页面)
- 自早期版本以来的 Excel 2010 对象模型更改(该链接可能指向英文页面)
- 自早期版本以来的 Outlook 2010 对象模型更改(该链接可能指向英文页面)
- 自早期版本以来的 PowerPoint 2010 对象模型更改(该链接可能指向英文页面)
- 自早期版本以来的 Word 2010 对象模型更改(该链接可能指向英文页面)
这是一篇本地化的博客文章。请访问 Understanding potentially impactful changes in the Office 2010 object model 以查看原文