2014-01-10 16 views
0

下面的代码将命名范围“MasterLLTable”复制n次,其中n是两个整数NumTables和UserNumTables之间的差异。 n可以在几百,所以循环可能需要几秒钟的时间才能运行。有没有办法通过用更有效的方式替换While循环来加速此操作?如果可能的话,需要在没有While循环的情况下制作n个“MasterLLTable”副本。而且,表格之间的间距必须保留。用更高效的代码替换While循环吗?

Do While NumTables < UserNumTables     
    Range("MasterLLTable").Copy EIRPLL.Cells(LastLLRow + 2, 2) 
    LastLLRow = EIRPLL.UsedRange.Rows.Count 
    NumTables = (EIRPLL.UsedRange.Rows.Count - 4)/15 
Loop 

回答

3

该代码是相当优化的,有些东西可以挑选,但这很可能不是导致执行速度缓慢的原因。由于发生所有互操作,VBA本质上很慢。但是,你可以用一些小技巧加速这一过程:

  • 首先,设置Application.Calculation = xlCalculationManual执行循环,然后Application.Calculation = xlCalculationAutomatic循环执行前后。这将阻止Excel在每次粘贴操作后计算每个单元格。

  • 其次,您可以在设置Application.Calculation的同时设置Application.ScreenUpdating = FALSE,这将停止GUI在脚本运行时更新任何内容。循环完成后(或脚本),设置Application.ScreenUpdating = TRUE以使Excel再次开始执行其操作。

我注意到,这两件事情往往会造成VBA脚本性能的最大差异。有一个网站Optimizing VBA,通过其他一些你可以做的事情,但他们可能不值得你花时间。在我回答的另一个问题上有更多的关于这个问题的讨论:VBA - Code Execution is Extremely Slow

+0

虽然我没有包括它,但我的较大的代码暂时禁用屏幕更新,但它没有禁用手动计算。现在,它确实。巨大差距!谢谢你的提示。 – jmaz