用更高效的代码替换此While循环?

时间:2014-01-10 19:06:16

标签: excel-vba vba excel

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

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

1 个答案:

答案 0 :(得分:3)

这段代码是相当优化的,有些东西你可以挑剔,但这很可能不会导致你看到的执行缓慢。由于发生了所有互操作,VBA本身就很慢。但是,您可以通过一些技巧加快速度:

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

  • 其次,您可以在设置Application.ScreenUpdating = FALSE的同时设置Application.Calculation,这将阻止GUI在脚本运行时更新任何内容。一旦循环完成(或脚本),设置Application.ScreenUpdating = TRUE让Excel再次开始做它。

我注意到这两件事往往会对VBA脚本的性能产生最大的影响。有一个网站Optimizing VBA可以解决您可以做的其他事情,但它们可能不值得您花时间。在我回答的另一个问题上有更多关于这个问题的讨论:VBA - Code Execution is Extremely Slow