dポイントプレゼントキャンペーン実施中!

お世話になります。
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

A 回答 (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
    • good
    • 0

こんにちは


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

こんにちは


エラーストップしたときに I とか D の内容をウォッチ式で確認して下さい。
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

今回は下記(5)でエラーしました。調べると
(5)Application.CommandBars("Row").Controls("削除(&D)").Enabled
=<プロシージャの呼び出し、または引数が不正です。>
と出ます。

何卒よろしくお願いします。

お礼日時:2009/04/17 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!