イベントプロシージャの一番の問題点は、イベントの連鎖をコントロールしなければならないことです。「あるセルの値が変わる」→「イベントが起動する」→「別のセルの値が変わる」→「イベントが起動する」というようにイベントが連鎖すると、最悪の場合それがループし永遠に続いてしまうことになりかねません。
もちろん、これを逆手にとって生かす方法もあります。つまり、イベントに連鎖してイベントが発生し、別なマクロが起動されるようにすることで、コード自体を簡潔にすることができます。ただし、どのイベントとどのイベントが連鎖しているのかは、コード上では分からないため、これを管理するのは極めて困難です。特に時間が経って、機能の追加をしていくと、思わぬ連鎖が生じて、マクロの実行ができなくなったり、実行速度が低下したりする原因になる場合があるのです。
このため、VBAアセットでは、イベントは連鎖させないというスタイルを採っています。そのためには、「appliation.enableevents=false」というコマンドを入れる必要があるのですが、問題は、どこに入れるかです。
必要の都度入れるという選択肢もあるのですが、VBAアセットでは、マクロの最初でfalseにして、最後にtrueに戻す。途中では、切り替えを行わないというようにして、マクロがシンプルになるようにしています。
こちらもご参照下さい。
コメント