今日はVBAの高速化とスイッチングツールを書こうと思う。
Application.ScreenUpdating
Application.Calculation
Application.EnableEvents
以上三つを止めると処理が早くなる。
ActiveWindow.WindowState
上記はお好みでウィンドウを最小化して動きを観察できる。
ブックを開いたり閉じたりする作業の時はいいかもしれない。
但し、Application.Calculationなどは計算も止めるので注意が必要。
元の処理ブックがコンテンツブロック時に計算されずに保存されていたりすると
予期せぬ結果が起こったりする。
t-hom’s diary様より引用させてもらったスイッチ機能は、
一時的に高速化を止めて計算させたりするときに役立つ。
一時的に計算を再開させることも少ないかもしれないが、
使えたら便利な状況もあるかもしれない。
では早速コードを示そう。
Sub 高速化()
Application.ScreenUpdating = False '描画抑制
Application.Calculation = xlCalculationManual '計算抑制
Application.EnableEvents = False 'イベント抑制
ActiveWindow.WindowState = xlMinimized '画面サイズ最小化
'処理
MsgBox ("これで早くなるけど不具合もたまにあるよ")
MsgBox ("特にCalculationとEnableEventsには注意だよ")
Application.EnableEvents = True 'イベント再開
Application.Calculation = xlCalculationAutomatic '計算再開
Application.ScreenUpdating = True '描画表示
ActiveWindow.WindowState = xlMaximized '画面サイズ最大化
End Sub
't-hom’s diary様より引用
'Applicationを手動変更するプロパティプロシージャ
Property Let Focus(ByVal Flag As Boolean)
With Application
.EnableEvents = Not Flag
.ScreenUpdating = Not Flag
.Calculation = IIf(Flag, xlCalculationManual, xlCalculationAutomatic)
End With
End Property
'Application手動変更方法
Sub 高速化手動変更()
Focus = True '描画停止、イベント抑制、手動計算
Focus = False '描画再開、イベント監視再開、自動計算
End Sub