'Excelのイベントを抑止する Application.EnableEvents = False
'Excelのイベント抑止の解除 Application.EnableEvents = True
Excelのイベント発生を抑止するには「Application.EnableEvents」プロパティに「False」を設定します
イベントとは、保存や印刷、セルの選択などユーザーのなんらかの動作に応じて自動的に発生するプロシージャです
このイベントに何らかの処理を作成した場合、他の処理を実行中でも対象の操作が発生すればイベント処理が実行されます
このプロパティを「False」にしておくことで、このイベントプロシージャの実行を抑止することが出来ます
抑止する場面は、ユーザーの操作ではなく処理中に行った処理での発生を抑止する目的で使用します
イベント抑止の使用場面
まず、イベントを作成します
画像のようにシートのイベントにより、指定のシートのみで「UserForm1」を表示させたいのでこの様にActivateイベントではフォームの表示処理を実行します
Deactivateイベントではフォームを終了させます
このイベントはそれぞれ、シートがアクティブになったときと非アクティブになったときに発生するイベントです
ただ、この処理を作成したときに問題となるのはフォームの処理で別のシートのデータを扱ったりする場合にシートを移動させる必要があります
この時にフォームの処理中でありますが、シートが切り替えられた時点でDeactivateイベントが発生しフォームは強制終了されます
フォームが終了しても処理中はデータがメモリ上に保持されているため、入力することは出来ます
ただ、入力が完了して元のシートに戻ってきたときにActivateイベントが発生するためフォームが起動しますが、この時に表示されるデータは初期値になっています
入力をすると、コントロールのデータが全て初期リセットされるフォームになってしまいます、これは使い勝手最悪です
そこで使用するのがこのプロパティです
入力処理のシートを切り替える前に「False」に設定しておけばシート切替によるフォームの起動・終了が実行されなくなります
Excelのイベントを抑止するので、ブックイベントもシートイベントも実行されなくなりますので、使用後は必ず設定を解除しておきましょう
ただ、ユーザーフォームはExcelとは別のようでこの設定を行ってもイベントの実行は抑止されませんので注意が必要です
ユーザーフォームのイベントに対しては、フラグで抑止処理を自作する必要があります