Excel中的VBA:连续复制和粘贴后,屏幕冻结几秒钟

我写了一个简单的代码来复制这个问题:

Sub test() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For i = 1 To 1000 Range("A" & i).Copy Destination:=Range("B" & i) Next Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 

如果我执行上述程序块,程序完成后,屏幕将冻结约5秒钟,然后将控制权释放给用户。

如果我更改副本的次数(从代码中的1000到其他值),我可以看到冻结时间与副本数成正比。

这是我的电脑的问题,还是实际发生在每台电脑上? 我该如何解决这个问题?

我不认为这是一个孤立的问题,因为我在计算中遇到类似的延迟时间(与正确指出的迭代上限成正比)。 它只是不幸的迭代和/或粘贴的结果,因为这(我发现)在VBA中比大多数事情(并最终减慢代码)花费更长的时间。 可能值得一试的是:

 Sub test() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For i = 1 To 1000 'Range("A" & i).Copy Destination:=Range("B" & i) Cells(i, 2).Value = Cells(i, 1).Value Next Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 

从技术上讲,它和你的代码完全一样,但是不需要复制。 我不确定这将如何回到您的实际工作(而不是这个例子),但我发现运行在我的机器上更快。

基本上,我的观点是复制和/或粘贴大迭代只是缓慢的VBA的句号,所以我的build议是尽量避免。 好的链接到下面的文章:)

http://www.ozgrid.com/VBA/SpeedingUpVBACode.htm