【VBA】イベントを発生させない方法と注意点

2023年1月9日

【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にする箇所へ飛ぶようにしておけば、エラーが発生した場合でもイベントが発生する状態に戻してくれます。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2023/06/06 16:32:04時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい