こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelで右クリック禁止が出来ない?

Excel2010 を使用しています。
設定した範囲(1~10行)のセルを右クリックしたときに出るショートカットメニューを表示しない様な設定にしたく、
 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  Dim myRowTop As Long , myRowBottom As Long
  myRowTop = 1
  myRowBottom = 10
  If ActiveCell.Row >= myRowTop And ActiveCell.Row <= myRowBottom Then
   Application.CommandBars("Cell").Enabled = False
  Else
   Application.CommandBars("Cell").Enabled = True
  End If
 End Sub
としました。
これで通常問題ないと思いますが、
A1 : F10 を「テーブルとして書式設定」し、この範囲のセルを右クリックしたとき、
ショートカットメニューが表示されてしまいます。
CommandBars([Index]) の Index が違うのかと思い、試してみましたが、直りませんでした。

どなたか詳しい方、どうか教えてください。
よろしくお願いします。

投稿日時 - 2016-05-13 15:50:14

QNo.9171938

困ってます

質問者が選んだベストアンサー

こんにちは。お邪魔します。

> A1 : F10 を「テーブルとして書式設定」し、この範囲のセルを右クリックしたとき、
> ショートカットメニューが表示されてしまいます。
> CommandBars([Index]) の Index が違うのかと思い、試してみましたが、直りませんでした。
この部分にだけお応えすると、
  CommandBars("List Range Popup")
です。
テーブルとして定義した場合は、通常のExcelスプレッドシートとは別物になりますから、
ポップアップメニューも別物(機能も異なります)になります。
必要なら、CommandBars("Cell")、CommandBars("List Range Popup")、
両方それぞれ操作することになります。
直接の回答としては以上です。

<目的>がぼやけているようにも思えて全体として何が正解か悩みますが、
【設定した範囲(1~10行)を右クリックした時だけ、ポップアップメニューを表示させたくない】
というのと、
【設定した範囲(1~10行)を選択中であれば常に、ポップアップメニューを無効にしたい】
というのと、
前者であれば確かに回答No.1のようなやり方で十分と思いますが、
後者であるならば、
 キーボードのアプリケーションキーを押下げる
など、右クリック以外の方法でもポップアップメニューを表示させない為に
ポップアップメニューを無効にするのが、やはり正解ということになりますけれど、
 Application.CommandBars([Index]).Enabled = False
 Application.CommandBars([Index]).Enabled = True
を切り替える契機については、ご提示の方法が<目的>に適うものか、
も少し検討が必要な気もします。
私なら(既に書いてテストしてますが)、
 Worksheet_BeforeRight Clickイベントには一切触らずに、
ThisWorkbook モジュールにて、
 Workbook_SheetSelectionChange 【選択範囲が変更された】
 Workbook_SheetActivate 【対象のシートが選択された】
 Workbook_SheetDeactivate 【対象のシートが選択が解放された】
 Workbook_WindowActivate 【ブックがアクティブになった】
 Workbook_WindowDeactivate 【ブックがアクティブでなくなった】
5つのタイミングをベースに設計します。
 シートはひとつだけ!
 ブックもひとつ、他のブックは絶対開かない!
とか、
 右クリックする時は必ず単一セルを選択するのが絶対的な決め事!
とか、
 ポップアップメニューが表示されない状態のまま
  他のシートやブックを選択して操作することは絶対にしない!
とか、
 ポップアップメニューが表示されなくなっても
  どうせExcelを閉じれば元に戻るから、適当でいい!
というような許された状況であれば、そのままで構わないのですが、
> 右クリック禁止
というのは、<目的>ではなくて、
そちらで想定された<目的>の為の<手段>である筈です。
ご提示のマクロは【ポップアップメニューを無効にする】もの、
ご説明では【右クリック禁止】
この似て非なる喰い違いが、やっぱり気になりますから、
全体の動作仕様(設計)について、再検証することをお勧めしておきます。

ご不明な点やこちらの応答に不足があるようでしたら、補足欄にでも書いてみて下さい。
主題から外れない課題については再度こちらで検討します。

投稿日時 - 2016-05-14 01:22:39

お礼

回答ありがとうございます。
"List Range Popup"が分からず、悩んでいました。
また、ご指摘の様に目的について明記していませんでした。
目的は「設定した範囲の行・列を削除させたくない」というものです。
設定した範囲外から複数セルを選択した場合、ポップアップメニューが開いてしまう様なので、もう一度動作を考え直します。
アドバイスありがとうございました。

投稿日時 - 2016-05-16 10:40:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 If Target.Row <= 10 Then
  Cancel = True
 End If
End Sub

だけで充分。

「Cancel = True」とすると「BeforeRightClick」は「元々右ボタンクリックされなかった」として処理します。

呼び出された時の「Target」は「右クリックされた単一セル(または、セル範囲)」を示します。「Target.Row」が「10以下」と言うのは「選択されたセル範囲が1~10行を含む」という意味になります。

投稿日時 - 2016-05-13 17:32:18

お礼

出来ました!
回答ありがとうございます。
ただ、Indexの内容を教示くださった、No.2さんをBAとさせて頂きます。

投稿日時 - 2016-05-16 10:35:16

あなたにオススメの質問