【VBA】イベントを発生させない方法と注意点
イベントが仕込んであるブックでマクロを実行すると処理に時間がかかることがあります。
例えばWorksheet_Changeイベントが用意されているブックで、マクロでセル入力を行うとその度にイベントが実行されるので余計な時間がかかります。
対策として一時的にイベントを無効にしてしまうことができます。
今回はイベントを無効にする方法とその注意点を紹介します。
イベントを発生させない方法
Sub NoEvents()
Application.EnableEvents = False
'この間はイベントが発生しない
Application.EnableEvents = True
End Sub
イベントを発生させないためにはApplication.EnableEventsプロパティを使用します。
このプロパティがFalseとなっているとイベントは発生しません。
そのため上のコードのように、マクロの最初でFalseにしてマクロの最後でTrueにすれば間の処理でイベントが実行されるのを防ぐことができます。
イベントを発生させない時の注意点
Application.EnableEventsプロパティを扱うときに注意して欲しいことがあります。
もしこのプロパティがFalseのままになると、本来実行させたいときにもイベントが発生しなくなってしまいます。
Sub NoEvents()
Application.EnableEvents = False
'この間はイベントが発生しない
'ここでエラー終了するとEnableEventsがFalseのままになる
Application.EnableEvents = True
End Sub
このようにマクロが予期せぬエラー終了すると、気付かないうちにEnableEventsがFalseのままになってしまうかもしれません。
Sub NotEvents()
On Error GoTo ErrorTrap
Application.EnableEvents = False
'この間はイベントが発生しない
ErrorTrap:
Application.EnableEvents = True
End Sub
この状況を防ぐためにはOn Error GoToステートメントを使用しましょう。
エラーが発生した場合にEnableEventsをTrueにする箇所へ飛ぶようにしておけば、エラーが発生した場合でもイベントが発生する状態に戻してくれます。