Office関連

右クリックメニューを非表示にするExcelマクロ

Answersに図形を右クリックしたときのメニューをマクロで非表示にしたい、との質問があったので簡単に処理を考えてみました。

※ 下記コードはExcel 2010で動作確認を行いました。
※ 2007では検証していませんが2003では動作しません。
※ 仕様上、一瞬だけメニューが表示されます。

'ThisWorkbookに記述
Option Explicit

Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetLastActivePopup Lib "user32" (ByVal hWndOwnder As Long) As Long

Private WithEvents Cbars As CommandBars

Private Sub Workbook_Open()
  Set Cbars = Application.CommandBars
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set Cbars = Nothing
End Sub

Private Sub Cbars_OnUpdate()
  Dim s As String * 255
  Dim clsName As String
  Dim h As Long
  
  h = GetLastActivePopup(Application.hWnd)
  GetClassName h, s, Len(s)
  clsName = Left$(s, InStr(s, vbNullChar) - 1&)
  If clsName = "Net UI Tool Window" Then
    DestroyWindow h 'ウィンドウを破棄
  End If
End Sub

上記コードはCommandBarsオブジェクトのOnUpdateイベントを利用して、右クリックメニュー(ウィンドウ)が表示されたらそのウィンドウを破棄する、といった動作を行います。

上記コードのままだとセルを右クリックした際のメニューも破棄してしまうので、図形を右クリックしたときのメニューを破棄したい場合には、下記コードのように判定を付ければ処理できるだろうと思います。

If TypeName(Selection) <> "Range" Then
  DestroyWindow h 'ウィンドウを破棄
End If

ただ上記の処理はあくまでも簡易的なものなので、ユーザーの操作を制限したい場合には、下記Webページにあるようにメニュー項目そのものをカスタマイズ・無効化するか、シートやブックを保護する、あるいは決められた操作以外を行わないようユーザーに通達等して運用上で対応した方が確実だろうと思います。

「特定のコントロールを無効にする(Office 2007,2010)」
//www.ka-net.org/office/of35.html
「特定の機能を利用禁止にする」
//www.ka-net.org/ribbon/ri21.html
「右クリックメニューをカスタマイズする(Word 2010)」
//www.ka-net.org/ribbon/ri36.html

個人的には、マクロで凝った制限を掛けるよりは保護や運用上で対応することをお薦めします。

選択範囲内で文字列検索を行うWordマクロ前のページ

マクロに割り当てたショートカットキーをCSVファイルとして出力するWordマクロ次のページ

関連記事

  1. Office アドイン

    [Officeアドイン]枠線(目盛線)の表示・非表示を切り替える方法

    ここ二週間ほど体調を崩していたので久しぶりのブログ更新です。久…

  2. Office アドイン

    [Office用アプリ]「あいさつ文の挿入」を作業ウィンドウアプリに移植してみる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  3. Office関連

    Office 365 APIをVBAから呼び出す(1)

    2015年4月に公開されたOffice Teamのブログ記事「Toda…

  4. Office関連

    [Excel Services ECMAScript]ループによる入力と一括入力の処理時間について

    埋め込んだExcelワークブックのセルに対して、ループで1セルずつ入力…

  5. Office関連

    ディスプレイのサイズを取得するVBAマクロ

    「VBA ディスプレイ 幅 高さ」といったキーワード検索でのアクセスが…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP