Dave的Windows XP系统上仍然有旧版本的Excel 97。该系统具有一个宏,用于处理工作表中的信息。它能够在约12秒内处理500行信息​​。在较新的计算机上,如果在Windows 7下运行Excel 2010,则对相同数据进行操作的相同宏大约需要3到4分钟才能运行。这两台机器具有相同的内存量(4 Gb)和可比的处理器。 Dave想知道为什么宏在较新版本的Excel上运行这么慢。

除了实际上没有看到代码之外,很难做出除了最通用的注释以外的任何内容,但这并不意味着没有什么可说的。 :>)您要做的第一件事是检查宏程序的工作方式。例如,它是否逐步浏览工作表的所有行以进行处理? (即使宏正在处理500行信息​​,并不意味着它不会单步执行工作表中的每一行。)之所以如此重要,是因为早期版本的Excel仅在工作表中使用65,000+行,而最新版本可处理16倍的行(超过1,000,000)。如果您的宏之前需要花费12秒钟才能运行,那么16倍的时间就是192秒,即3到4分钟。

也有报告说,Excel 2010与打印机驱动程序定期进行通信,而在以前的Excel版本中却没有这样做。您可以通过在宏的开始处关闭通信来确定这是否会使宏变慢:

Application.PrintCommunication = False

在宏的末尾,请记住将属性设置回True,以便Excel可以再次与打印机通信。

即使差异很小,也可能与较新的机器有所不同。例如,较新的计算机可以运行与较旧的计算机不同的后台程序,从反病毒程序到语音识别软件都可以。另外,它可能具有一些其他Excel加载项,这些加载项不在早期系统上。您不会认为这样的事情会影响宏性能,但实际上确实会。当然,您将不知道所加载的内容,将其禁用,然后再次尝试运行宏,才知道。

同样,可能是较新的计算机具有一些需要定期轮询的外部设备,这可能会减慢速度。我办公室中有一个系统,该系统具有通过USB端口连接的外部硬盘驱动器。有时,系统本身(Windows)需要关闭电源并打开外部驱动器的电源,在这种情况下,事情基本上会在计算机上停止。有罪的设备可能是USB附件,扫描仪,网络驱动器等。这可能非常令人沮丧,尤其是当它减慢了一些本不该花费很长时间的事情时。

在这种情况下,一个很好的建议是不要仅依赖于单个Excel 2010系统的发现。如果您可以访问多台计算机(甚至可能有一些不在办公室),请尝试使用它们上的宏查看会发生什么。如果运行速度更快,那么您会知道在运行缓慢的2010系统上还有一些看不见的东西。

如果发现所有内容实际上都是“相等的”,则可能需要进入系统上的VB编辑器,并开始对宏的各个部分进行一些计时。这很繁琐,但是可以帮助您缩小宏陷入困境的位置。

如果您决定采用后一种方法,那么您会发现值得购买一本优秀的Excel VBA程序员参考书。市场上有几种,所以货比三家。 (John Walkenbach编写的任何内容都不会出错,我听说过_Excel 2007 VBA程序员参考_的好处。)

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12440)适用于Microsoft Excel 2010。