Workbook_SheetBeforeRightClick 右クリックした場合に使用するイベント

Workbook_SheetBeforeRightClick

ブック内のシートを右クリックしたら処理をする
Workbook_SheetBeforeRightClick

イベントマクロ 06回

ワークシートを右クリックしたときに処理するイベントマクロ

この記事で学べる内容

  • Workbook_SheetBeforeRightClickイベントの役割と使い方を理解する
  • 右クリック操作を検知して、既定のコンテキストメニューの表示を抑止する方法を学ぶ
  • Cancel = True の設定で右クリックメニューを無効化する方法を習得する
  • 右クリック操作時にメッセージボックスを表示して、ユーザーに通知するマクロを作成できる
  • 特定のシート名(例:Sheet1、Sheet3)を条件に、シートごとに右クリックを禁止する条件分岐の書き方を学ぶ
  • Workbookオブジェクトのイベントを使って、ブック全体の操作を管理する方法を理解する
  • 右クリックしたセルのアドレスとシート名を取得・表示するMsgBoxコードの書き方を習得する
  • Target.AddressとSh.Nameを組み合わせて、クリック位置の情報を出力する方法を学ぶ
  • Excelのイベント処理で、ユーザー操作を制御・ガイドするインタラクティブなマクロ設計を体験する

このコードでは、既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。
規定の右クリックメニューを表示させる前に、他の処理を行うわけです。

(サンプルファイルは、こちらから イベントマクロ06回サンプルデータ

ブックのシートで右クリックを禁止する

1. ブック内のシートで規定の右クリックの操作を無効にします。コードはThis workBookに記述します。
コードが記述されているブック内のシートで右クリックしてもキャンセルされて何も起りません。


Workbook_SheetBeforeRightClick1 border=0
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
            ByVal Target As Range, Cancel As Boolean)
    Cancel = True
End Sub

2. こちらは、メッセージを表示する例です。右クリックできないと「あれ?」と驚くだろうから、メッセージボックスで右クリックが使えませんと表示する。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    MsgBox ("このワークブックでは右クリックメニューは使えません"), _
    vbInformation, "右クリックメニュー"
End Sub


Workbook_SheetBeforeRightClick2 border=0

特定シートだけ右クリック禁止

3. 今度は、シートを限定して右クリック禁止にしましょう。シートが4枚あるので、Sheet1とSheet3を右クリック禁止にします。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
      If Sh.Name = "Sheet1" Or Sh.Name = "Sheet3" Then
        Cancel = True
      End If
End Sub

このコードですと、右クリックしても指定シートでは、何もおこりません。メッセージを表示した方が親切ですね。


Workbook_SheetBeforeRightClick3 border=0

下図は、コードにメッセージを表示するようにしました。


Workbook_SheetBeforeRightClick4 border=0

右クリックしたセルのアドレスを表示する

4. こんどは、右クリックしたシートのシート名とアドレスを表示することにします。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    MsgBox "右クリックしたのは、" & vbCrLf & _
        "シート名:" & Sh.Name & vbCrLf & _
        "セル位置:" & Target.Address(0, 0) & " です。"
End Sub

Workbook_SheetBeforeRightClick5 border=0

こちらもおすすめ