Worksheet_BeforeRightClickイベント
セルや行見出しや列見出しを右クリックしたときにマクロを動かしたい場合があります。セルの右クリックを検知するには、セルがある対象のシートにWorksheet_BeforeRightClickという名前のプロシージャを作っておく必要があります。
Worksheet_BeforeRightClickプロシージャのようにイベント関連のプロシージャは基本的にVBA画面の操作で作成します。手順は以下になります。
- VBA画面で対象シートのコードを開きます。
- Worksheetオブジェクトを選択します。このときWorksheet_SelectionChangeプロシージャが作成されますが、これは使いませんので後で削除します。
- Worksheet_BeforeRightClickイベントを選択します。
- これでWorksheet_BeforeRightClickが作成されます。先に作成されていたWorksheet_SelectionChangeプロシージャは不要なため削除します。
あとは、Worksheet_BeforeRightClickプロシージャの中で、セルの値が変わった際に行いたい処理を書いていくことになります。必要であれば引数のセルの値が変わった対象であるRangeオブジェクトを使います。
イベント発生タイミング
Worksheet_BeforeRightClickプロシージャが呼ばれるのはセルや列見出しや行見出しを右クリックした直後になります。右クリックを押すとコンテキストメニューが表示されますが、コンテキストメニューはWorksheet_BeforeRightClickプロシージャの処理が終わったあとに表示されます。
セルや列見出しや行見出しの他にはシートタブも右クリックできますが、シートタブの右クリックではWorksheet_BeforeRightClickイベント発生しません。
構文
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target | 右クリックした際のセルや列範囲や行範囲のRangeオブジェクトが設定されます。
結合セルや複数セルを右クリックした場合はそのセル範囲のRangeオブジェクトが設定されます。 |
Cancel | プロシージャを終了後にコンテキストメニューを表示する(False)かしない(True)かを設定します。
右クリックイベントが発生した際にはFalseが設定された状態で渡されます。 初期値のFalseのままだとプロシージャの処理終了後にコンテキストメニューが表示されますが、Trueに変更した場合はコンテキストメニューは表示されません。 |
右クリックしたセルを特定する
右クリックを行ったセルを特定するには、Worksheet_BeforeRightClickプロシージャの第一引数のRangeオブジェクトを利用します。
Rangeオブジェクトのため、セル操作で利用するメソッドやプロパティを利用できます。
例えば右クリックしたセルの座標を取得するには以下のようにAddressプロパティを利用します。
1 2 3 |
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Debug.Print Target.Address(False, False) End Sub |
このように第一引数のRangeオブジェクトを使ってセル操作を行うことが可能です。