以下代码复制命名范围“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
答案 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