• ベストアンサー

VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効にしようとするとエラーが出ることがある。

お世話になります。 VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効して、下記VBAを作成しました。 しかしながら、起動時(実行時)に 「実行時エラー 5 プロシージャの呼び出し、または引数が不正です。」が出ることがあります。 でないときもあるのですが、 デバック時にとまるところは、毎回変わり(1)~(5)のどれかで止まります。 使用したい環境はexcel2007,excel2003で正常に動くようにしたいのですが、何卒よろしくお願いします。 *************ソース********************* Private Sub Workbook_Open() InsertEnabled False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) InsertEnabled True End Sub Private Sub InsertEnabled(flg As Boolean) With Application (1) Application.CommandBars("Worksheet Menu Bar").Controls("挿入(&I)").Enabled = flg (2) Application.CommandBars("Cell").Controls("挿入(&I)...").Enabled = flg (3)Application.CommandBars("Cell").Controls("削除(&D)...").Enabled = flg (4)Application.CommandBars("Row").Controls("挿入(&I)").Enabled = flg (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled = flg .CommandBars.FindControl(, 296).Enabled = flg .CommandBars.FindControl(, 293).Enabled = flg End With End Sub

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

  • ベストアンサー
  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.3

とりあえず、私の環境(2003)では Application.CommandBars("Row")のコントロールに 挿入はありませんでした・・・ 削除(&D)も削除(&D)...となっていましたし。 そこで、ちょっと無駄の多い処理になるかもしれませんがこうしてみては? Private Sub Workbook_Open() InsertEnabled False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) InsertEnabled True End Sub Private Sub InsertEnabled(flg As Boolean) Call ControlEnabled(flg, "Worksheet Menu Bar") Call ControlEnabled(flg, "Cell") Call ControlEnabled(flg, "Row") With Application.CommandBars .FindControl(, 296).Enabled = flg .FindControl(, 293).Enabled = flg End With End Sub Private Sub ControlEnabled(flg As Boolean, BarName As String) Dim i As Integer '指定コマンドバーのコントロールの数だけループし、挿入もしくは削除から '始まるコントロールを有効/無効化する With Application.CommandBars(BarName) For i = 1 To .Controls.Count If .Controls(i).Caption Like "挿入*" Or .Controls(i).Caption Like "削除*" Then .Controls(i).Enabled = flg End If Next i End With

その他の回答 (2)

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.2

こんにちは #1です。ごめんなさい。見当違いのメッセージでした。無視して下さいm(__;m

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんにちは エラーストップしたときに I とか D の内容をウォッチ式で確認して下さい。

kgyqk433
質問者

お礼

ご返事ありがとうございます。 今回は下記(5)でエラーしました。調べると (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled =<プロシージャの呼び出し、または引数が不正です。> と出ます。 何卒よろしくお願いします。

関連するQ&A

  • エクセル VBA で行の右クリックメニューから行の挿入削除を無効にしたい

    お世話になります。 右クリックメニューの行の挿入と削除を無効にしたいのですが、 セルを選択して、右クリックメニューの挿入・削除は Private Sub Workbook_Open() Dim mymenubar1 As CommandBar Set mymenubar1 = Application.CommandBars("Cell") mymenubar1.Controls("挿入(&I)").Enabled = False End Sub で無効にできたのですが、 行を選択→右クリックメニューの挿入削除の無効化の仕方がわかりません。 ※セルに対してではなく、行に対して行いたいのです。 ご教授頂ければと幸いですのでよろしくお願いします。

  • Excelシート上で右クリックができない

    Excelのシート上で右クリックをしても、ショートカットメニューが 表示されなくなってしまいました。 気になる点としては、下記のようなコードを記述し、ショートカット メニューを削除したことがあるのですが、影響はありますでしょうか? Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) For Each num In Application.CommandBars("Cell").Controls num.Delete Next End Sub 現在は、下記のようにしていますが、状況は変わりません。 ちなみに、下記コートをすべて削除しても状況は変わりません。 ブックを新規作成しても、表示されません。 シートの保護はしていません。 Windowsのデスクトップなどではショートカットメニュは表示されます。 VBE上でも表示されます。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub 以上、よろしくお願いします。

  • 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 が違うのかと思い、試してみましたが、直りませんでした。 どなたか詳しい方、どうか教えてください。 よろしくお願いします。

  • エクセル2003で作成したVBAを2007で使用したい

    エクセル2003で下記のようなVBAを作成していました。 作成した物を使用者が印刷設定を変更できないように ブックを開くと同時に印刷ボタンなどを非表示にしていたのですが・・・ 2007でも使用出来るようにしたいと思ったのですが 2007ではこのままではエラーが出てしまうようです。 2007はまったく扱ったことがないのでどのようにすればよいかわかりません。 どなたかご教授いただけたらと思います。 Private Sub Workbook_Open() Application.DisplayStatusBar = False 'ステータスバー非表示 'ブックを開く時ページ設定と印刷を非表示 On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("ページ設定(&U)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷(&P)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷プレビュー(&V)").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷範囲(&T)").Enabled = False Application.CommandBars("Standard").Enabled = False End Sub

  • Excelで追加した右クリックメニューが動かない

    Windows Vista Excel2007です。 Sheet1に、次のようにVBAでプログラミングしたのですが、 '------------------------------------------------------------------------------- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)   Application.CommandBars("Cell").Reset   With Application.CommandBars("Cell").Controls.Add()     .Caption = "テスト"     .OnAction = "test"   End With End Sub Public Sub test()   MsgBox "OK" End Sub '------------------------------------------------------------------------------- 右クリックメニューには追加できたのですが、その「テスト」メニューをクリックすると、 次のようなエラーダイアログが表示されます。 「マクロ'Book1!test'を実行できません。このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。」 セキュリティセンターは「すべてのマクロを有効にする」に設定しており、他のマクロは正常に動作します。 どうしてエラーになるのか全く分かりません。 どなたか原因をご存知の方、ご教示をお願いします。

  • Excel2003でブックごとにコピー&ペースト不可の制限

    過去の記事なども調べ 下記でアプリケーション単位での設定はわかりました。 しかし全ブックに影響がでるのはこまるのでこれをブック単位に設定することはできますでしょうか。 お願いします! ▽ソース Sub Auto_Open() Call DisEnableKeys1 Call DisEnableKeys2 End Sub Sub DisEnableKeys1() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Workbook .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = eFlg .CommandBars("Cell").FindControl(, 22).Enabled = eFlg If eFlg = False Then .OnKey "^v", "DummyMacro1" Else .OnKey "^v" End If End With End Sub Sub DisEnableKeys2() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Workbook .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eFlg .CommandBars("Cell").FindControl(, 19).Enabled = eFlg If eFlg = False Then .OnKey "^c", "DummyMacro2" Else .OnKey "^c" End If End With End Sub Sub DummyMacro1() MsgBox "貼り付けは禁止されています。", vbInformation End Sub Sub DummyMacro2() MsgBox "コピーは禁止されています。", vbInformation End Sub

  • EXCELで右クリックメニューの追加

    EXCELで右クリックメニューを追加するにあたり、以下のコードをネットで取得しました。 右クリックメニューを階層化してさらに、いくつか選べるようにするにはどうしたら良いのでしょうか? ------------------------------------------------------------- Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "コマンド" .OnAction = "Sample_cmd" .BeginGroup = False End With Sub Sample_cmd() MsgBox Now End Sub ------------------------------------------------------------- 判る方お願いします。

  • エクセルVBA 保護シート&フィルタ実行 全シート

    VBA超初心者です。 たくさんのシートのあるエクセルで、 シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。 (現在エクセル2000を使用してます) ネットで調べてVBAを設定してみました。 しかし下記のようにするとコンパイルエラーになってしまうのですが、 正しい方法を教えていただけると助かります。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub Private Sub Workbook_Open()   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.filter"   End With   With Worksheets.Select     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True   End With End Sub Private Sub filter()   On Error Resume Next   Selection.AutoFilter End Sub

  • VBA 保存方法を教えて下さい

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("×ボタンは使用できません。" & vbCr & _ "よろしいですか?", vbInformation + vbOKOnly) = vbOK Then Cancel = True End If End Sub 上記の様にEXCELワークブックに記述しましたが、 別に設置した「保存終了ボタン」で終了できなくなってしまいました。 Workbook_BeforeClose が邪魔しているようです。 どうすれば解決できるでしょうか? 「保存終了ボタン」に記述しているコードは下記です。 Sub 保存終了() ActiveWorkbook.Save CommandBars("Worksheet Menu Bar").Enabled = True Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Drawing").Visible = True With Application .DisplayFormulaBar = True .ShowWindowsInTaskbar = True End With Application.WindowState = xlMaximized Application.Quit MsgBox "終了します" End Sub 宜しくお願いします。

  • Excel 数式バーを非表示にしたい(VBA)

    ツール-オプション-表示-数式バーのチェックを外せば 数式バーを非表示にできますが、VBAでやりたいと思います。 次の様に記述してみましたが、書式バーの「数式バー(F)」のボタンが非表示になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Visible = False End Sub 次の様に記述してみても今度は「数式バー(F)」のボタンが操作不可になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Enabled = False End Sub 他にも試すのですが、エラーになったりで答えに辿り着けず・・ どなたかヒントだけでもお願いします。

専門家に質問してみよう