在大型过程中调整VBA代码的性能

时间:2012-10-10 08:55:33

标签: performance debugging vba

我被要求调整每次打开工作表时加载的特定函数的性能(因此重要的是它不会使事情变慢)。似乎使这个函数变慢的一个原因是它对数据库(远程)进行了长时间的调用,但是还有很多其他的可能性。到目前为止,我一直在逐步完成代码,当某些事情似乎需要花费很长时间才能将其作为调优的候选者。

我想要一种更客观的方式来判断哪些电话减慢了我的速度。搜索时序和VBA会产生很多结果,这些结果基本上等于“写一个计数器,并在关键部分的任一侧启动和停止它”(通常使用明确调用的宏)。我想知道是否有办法(在调试器中)执行“下一步,并告诉我已过去的时间”之类的内容。

如果没有,有人可以建议一个合理的宏,我可以在立即窗口中使用我得到的东西吗?具体来说,我希望能够在更大的程序中计算任意一行代码(而不是一次完整的程序,这是我通过谷歌发现的)。

1 个答案:

答案 0 :(得分:3)

您进一步搜索的关键字是为VBA寻找“Profiler”。我听说过VB Watch和VBA代码分析器系统(VBACP)以及Stephen Bull的PerfMon,但是后者保留了它们,它们大部分都不是免费的。

到目前为止,对于我的答案的官方部分,我还有一些额外的可能无用的建议: 通过“人工测量”识别“慢速”代码(运行一行并说:“哇,这需要永远”)在调试器中肯定是有帮助的,然后你可以开始研究它们为什么慢。如果必须传输大量数据,则远程数据库调用可能需要很长时间 - 在这种情况下,最好在两端为数据加时间戳,并在获取数据之前询问数据库是否已修改数据。 根据您编写数据的方式将数据写入工作表可能会很慢 - 有时可以通过将数组写入范围而不是某种形式的迭代来改进数据。 我可能不需要告诉你ScreenUpdating和EnableEvents等等吗?