すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

Excelで行削除を出来なくしようと右クリックでメニューバーが出ないように
Sheet1に
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
CommandBars("Row").Enabled = False
End Sub

というコードを書きました。

するとどのExcelブックを開いても行列番号右クリックで
メニューが出なくなってしまいました。
コードを消してもダメです。

これは一体何が起こってるのでしょう?

  • 質問者:昼寝
  • 質問日時:2008-12-08 09:18:16
  • 0

確か、Workbook_SheetBeforeRightClickはThisWorkbookに記述するマクロだったと思います。
Sheet1では上手く動かないと思います。

それでは本題に入ります。
はじめに、マクロを消しても元に戻らない理由について。
これは、CommandBars("Row").Enabled = Flaseを行ったためだと思います。
この設定値(Flase)は、マクロを消しても残ります。
そのため、CommandBars("Row").Resetで元に戻す必要があります。

どんなマクロでもいいので、CommandBars("Row").Resetを書いて処理させてください。
処理後に右クリックメニューが表示されるのを確認したら、この1行は消してください。


次に、指定したシートだけ右クリックメニューを表示させないマクロについて。
これには、Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)を使います。
次のマクロをThisWorkbookに追加してください。

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

このマクロは、シート名がSheet1の時にCancelをTrue、それ以外の時にはCancelをFalseにします。
CancelをTrueにすると右クリックはキャンセル扱いになり、右クリックメニューが出なくなります。
つまり、シート名がSheet1の時だけ右クリックメニューが出なくなるわけです。

Cancel = (Sh.Name = "Sheet1")を、Cancel = (Sh.Index = 1)とする事もできます。
後者はシートのインデックス(順番)で判定しています。
シート名がよく変わる場合は、シートのインデックスで判断させた方が良いでしょう。


とりあえず、私の環境(Mac OS X、Excell バージョン X)では動作を確認しました。
ですが、Windows環境を用意することができなかったので、Windows上では試せてません。
そちらの環境で動かなかったらごめんなさい。

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

詳しく解説いただきましてありがとうございます。
教えていただいた方法できちんと動作しました。
なるべく自力で調べてやるようにしてるのですが
今回はビックリしてつい近道を、、、
とても勉強になりました。

並び替え:

削除不可のままになってるからです。

Sub CombarReset()
Application.ScreenUpdating = False
Application.CommandBars("Row").Reset
Application.ScreenUpdating = True
End Sub

これで削除不可を解除してください。

  • 回答者:不可のままだから (質問から55分後)
  • 0
この回答の満足度
  
参考になりました。回答ありがとうございました。
お礼コメント

ご回答ありがとうございます。
勉強させていただきました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る