このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2024年8月16日

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

イベントが仕込んであるブックでマクロを実行すると処理に時間がかかることがあります。

例えばWorksheet_Changeイベントが用意されているブックで、マクロでセル入力を行うとその度にイベントが実行されるので余計な時間がかかります。

対策として一時的にイベントを無効にしてしまうことができます。

今回はイベントを無効にする方法とその注意点を紹介します。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

イベントを発生させない方法

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上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい