- ベストアンサー
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
- みんなの回答 (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
お礼
ご返事ありがとうございます。 今回は下記(5)でエラーしました。調べると (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled =<プロシージャの呼び出し、または引数が不正です。> と出ます。 何卒よろしくお願いします。