弗雷德里克(Fredric)写了一篇关于宏的问题。当他使用F8在VB编辑器中运行宏时(逐步执行宏),只需几分钟即可完成。当他直接运行宏时,似乎要花很长时间才能运行,通常要花20分钟或更长时间才能执行。即使Fredric的工作簿很大(46 MB),两种运行方法之间的时差还是很麻烦的。

诸如此类的问题可能令人困惑,并且它们通常需要进行一些繁重的分析才能弄清楚。一个好的开始是在宏中添加一些“计时器代码”。添加一个小的例程来保存时间值,并添加另一个例程,该例程将保存的值与当前时间进行比较并显示时差。在您要分析的代码部分的开头,调用第一个例程(这样可以节省启动时间)

然后在代码部分的末尾调用第二个例程。

这样,您可以确定代码的哪些部分执行时间最长。这些是您随后关注的代码部分,因此您可以弄清楚它们正在做什么,这花费了很长时间。

另一件事是确保在宏的开头添加以下两行:

Application.ScreenUpdating = False Application.EnableEvents = False

这些关闭屏幕更新,这可能会减慢正在运行的宏的速度,并禁用事件。包括最后一行,以便工作表中的宏所做的更改不会触发Excel的重新计算例程。如果您的宏在工作表中的数据上进行了大量更改,并且每次更改后都触发了完整的重新计算,那么使用如此大的工作簿,仅花费大量时间进行重新计算即可。在宏的最后,您颠倒了添加的两行的效果:

Application.EnableEvents = True Application.ScreenUpdating = True

您可能还想在宏运行时关闭自动计算。这样做可以确保在宏移动数据或以其他方式处理数据时,Excel不会尝试计算中间结果。要关闭自动计算,请在宏的开头使用以下行:

Application.Calculation = xlCalculationManual

仅当您的宏不依赖工作表中的计算信息时,才应关闭宏中的自动计算。如果您确实将其关闭,则稍后可以通过在宏的末尾附近放置以下行来重新打开自动计算:

Application.Calculation = xlCalculationAutomatic

一个读者建议在宏在Excel工作表中运行时将焦点放在另一个应用程序上。例如,打开记事本并激活该窗口。当Excel不再处于活动状态时,该宏应大大加快速度。另一个尝试的方法是将鼠标指针向下移动到任务栏区域,而不是将其放在活动的Excel工作表上。

注意:

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

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

本技巧(818)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: