我有一个包含多个Subs的模块。像这样:
Sub Main()
Call ReadData '12 seconds
Call SortData '8 seconds
Call RemoveDupes '30 seconds
End Sub
从Userform调用此主Sub,总共运行2m。但是,如果我单独调用sub,我会得到上面代码中显示的时间。
经过多次测试后,我意识到调用最后一个sub时会出现问题。它没有明显的原因,从30秒到大约1分40秒。我在Main Sub上评论了第三个调用,当它结束时我直接从VBA编辑器窗口手动调用它并返回到30秒。
为什么会发生这样的事情有什么理由吗?
非常感谢你!
PS:每个sub的个别代码都有点长,所以我没有发布它们,但它们非常简单,没有什么复杂的。我使用的是Excel 2010 btw。答案 0 :(得分:1)
VBA清理了很多"松散的结局"当它完成运行VBA程序/宏时。首先,它返回程序使用的任何内存。如果您注释掉对RemoveDupes的调用,程序将在sortData之后结束,并且将执行此清理过程。然后使用干净的平板手动运行RemoveDupes。
检查在前两个潜艇中,您是否创建了许多/大型集合或其他未在子末尾设置为Nothing的对象。我认为它们必须在模块的顶部,在任何Sub或Function的代码之前声明。