イベントとはワークシートやセル、ブックやユーザーフォームのコントロールなどのオブジェクトに存在する自動的に発生するプロシージャのことです
イベントプロシージャの作成方法
Workbookオブジェクトに対するイベントの作成方法です
まずはコードウィンドウ上部にあるオブジェクトボックスから選択を行います
この時に、既定のイベントが自動的に作成されます
このイベントが不要な場合は、後のイベント追加後に削除してかまいません
イベント作成には、作成したいオブジェクトのコード内に入力カーソルを置いた状態にします
すると、オブジェクトの選択ボックスにそのオブジェクトが指定されます
その状態で右にあるプロシージャボックスから指定のイベントを選択することで作成が可能です
画像にもあるようにこの時に、このオブジェクト名とイベント名、その引数までを自動的に作成してくれます
ちなみに、引数名は変更可能ですが絶対に変更しないでください
非常にコードが分かりづらくなります
当サイトでのイベントの解説に関して
基本的にイベントの作成は上記の様にVBEの画面で、全て自動的に作成されます
サイト内コードをコピペすると、オブジェクト名を修正しないといけなくなり面倒だと思います
なのでサイトの趣旨とは異なってしまいますが、コピー用コードの記載はせずにイベントの説明を行なっていきます
なので複数のイベントをまとめて記事にしていますので探しにくい場合ももしかしたらあるかもしれませんがご容赦ください
イベント使用時の注意点
イベント全般で言える注意点は2つあります
・イベントは無意識下に実行されるプロシージャのため、ユーザーの行動次第で想定外のイベントが実行されてしまう可能性がある
まず、自動的に発生するという特性から非常に利点の多いイベントです
意識的にボタンをクリックしたりする必要がなく、ユーザービリティ向上には欠かせない要素です
ただ、意識して行うようなイベントであれば構いませんが、無意識に実行されるイベントもある点には注意してください
例えば、ダブルクリックすると発生するイベントはほぼユーザーが意識して行うイベントと思って良いと思います
対して、再計算やシート・ブックなどの選択変更ではユーザーの意思とは関係なく実行される可能性のあるイベントです
作成者側で想定していたタイミングでユーザーがそのイベントを発生させるとは限らない、ということは念頭に置いておいたほうが良いです
・プロシージャの実行中であってもイベントは発生する
イベントはイベントプロシージャでも通常のプロシージャでも、実行中にそのイベントが発生するとイベントプロシージャが割込みで発生します
セルのChangeイベントが作られたシートで、プロシージャの処理でセルの値を変更した場合、その変更した瞬間にセルのChangeイベントが実行されます
その後、元のプロシージャに戻ってきて処理が継続します
そして継続後にもセルの変更処理を行なっていた場合、その全てにおいてChangeイベントは実行されます
それが仕様としていれば構いませんが、違う場合は要注意です
その場合には、Excelでのイベントの発生を抑止する必要があります
以下の記事にその解説があります
イベントは非常に便利なのですが多用は禁物です
過去にイベントを多用していた頃、一つのChangeイベントが複数のイベントを連鎖的に発生させる状態になってしまっていました
そのせいで、一つのChangeイベントの処理変更を行う際に関係するイベント全てに対して修正が必要になり非常に大変な思いをしました
もしボタンなどで実行が問題ない場合は、イベントに頼らずボタンを作成し処理を実行するにしてください
後々機能追加などの処理変更の際にイベントが悪さをせずに済みます
Excelの本体イベントに関して
Excelのイベントというのは、初期状態では上記の作成方法では作成できません
これはオブジェクトボックスにExcelが表示されないためです
記事中で解説しているのは、Workbookに対するイベント作成です
これはブックのことになるので、Excelで開いているファイルの1つでしかないということです
それに対してExcelとはアプリそのものになります、これがVBEで初期状態では表示できないため少し特殊なものになります
表示させる作業が必要になります、以下の記事で解説しています