8

私のマクロは数値で大きなスプレッドシートを更新しますが、Excel が結果を計算しながらレンダリングしているため、実行が非常に遅くなります。マクロが完了するまで Excel が出力をレンダリングしないようにするにはどうすればよいですか?

4

5 に答える 5

16

提案されたソリューションの両方を使用します。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
于 2008-09-27T18:11:49.177 に答える
2

また、提案されたソリューションの両方を使用することを好みますが、ユーザーを以前の計算モードのままにします。

この特定のアプリケーションの場合、これは大したことではないかもしれませんが、通常は、手順の終了後にユーザーが設定を復元できるようにすることをお勧めします。

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

NB。また、Application.ScreenUpdatingをオンにするエラー処理を挿入することも価値があります。それ以外の場合は素晴らしいコードでエラーが発生した場合、;)メモリが適切に機能する場合、ScreenUpdating = falseの場合、Excelはエラーメッセージなどを表示しません。このようなもの:

Sub DoSomeThing


On Error Goto DisplayError

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

Exit Sub

DisplayError:
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

MsgBox Err.Description
End 'This stops execution of macro, in some macros this might not be what you want'
    '(i.e you might want to close files etc)'
End Sub
于 2009-01-17T00:30:38.473 に答える
2

Application.ScreenUpdating = False

もちろん、エラーが発生した場合でも、終了したら再び True に設定してください。例:

Public Sub MyMacro
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    ... do my stuff that might raise an error
    Application.ScreenUpdating = True
    Exit Sub
ErrHandler:
    Application.ScreenUpdating = True
    ... Do something with the error, e.g. MsgBox       
End Sub
于 2008-09-27T18:05:28.693 に答える
1

Joe と SeeR に基づいて構築されています (これは古い構文を使用しているため、Office 2000 の VBA と互換性があります):

On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...

AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
于 2008-09-27T18:49:53.733 に答える
0

オプションダイアログで自動計算をオフにすることができます.F9を押したときにのみ計算するように設定されています.

于 2008-09-27T18:03:17.030 に答える