|
|
| Excel VBA Macro ・ 画面制御 ・ FAQ |
|
メニューバーのメニューを削除するコードでエラーが発生するが?
|
|
|
|
Question 014p |
拙著「組み方講座・プロの定番」 |
 |
 |
|
|
299ページ 4章2-2 合わせ技[5] ◆ 環境・・ Excel 2002 & Windows XP

本を参考に下記のマクロを標準モジュールに記述しました。
質問1 (299P)
プログラムしたファイルを最初に開く時に、メニュー1個ずつの記述でエラーが発生→『オブジェクトが必要です』... で、その都度デバックで何も変更せずその状態のままで保存し、ファイルを開く事設定メニューの数だけ繰り返す... それ以降は正常に動作します。 で新たなマシンで開く時には同じ事象が発生... また同じ事を繰り返した後、正常に作動するようになる.... なぜでしょう?
質問2 (300P)
削除したメニューバーが復活しませんが... 以上、宜しくお願い致します。
Private Sub メニューを削除する() 'メニューバーの削除
For Each Menu In Application.CommandBars(1).Controls
If Menu.ID = "30002" Then
Menu.Delete
End If
If Menu.ID = "30003" Then
Menu.Delete
End If
If Menu.ID = "30004" Then
Menu.Delete
End If
If Menu.ID = "30005" Then
Menu.Delete
End If
If Menu.ID = "30006" Then
Menu.Delete
End If
If Menu.ID = "30009" Then
Menu.Delete
End If
If Menu.ID = "30010" Then
Menu.Delete
End If
If Menu.ID = "30011" Then
Menu.Delete
End If
Next
End Sub
'-----------------------------------------
Private Sub メニューバーを表示する() '削除したメニューバーの表示
CommandBars("Worksheet Menu Bar").Reset
End Sub
|
|
Answer |
Copyright (C) 2006.9.13 永井善王 |
|
|
拙著「ExcelVBAマクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます。
質問1は、メニューバーに[ツール(T)]だけを残して、他のメニュー つまり、[ファイル(F)] から [ヘルプ(H)] までの 8個のメニューを削除したいのですね。
結論から申しますと、マクロを下記のように修正すれば解決します。
Private Sub メニューを削除する() 'メニューバーの削除
For Each Menu In Application.CommandBars(1).Controls
If Menu.ID <> "30007" Then
Menu.Delete
End If
Next
End Sub
原因をご説明します。For Each...Nextステートメントは、メニューバーの各要素を変数「Menu」に取得して繰り返し処理してくれます。
1回目の繰り返しで変数「Menu」に取得してくれる要素は [ファイル(F)] メニュー (ID:30002) ですが、あなたのマクロでは、その要素を最初の If文で削除しますから、変数「Menu」に取得した要素は無くなってしまいます。
であるのに、直後の If文に Menu.ID = "30003" という記述があり、もう無くなってしまった要素を操作しようとしていますから、エラーが発生します。
質問2の現象については、こちらでは再現できません。なお、留意点として、このマクロをどのようにして実行するかですが、そのために用意したボタンをクリックするとか、ブックが閉じられるときに自動的に実行するようにする等の方法が考えられますが、ブックが開いている内に実行しなければなりません。
では、結果をお知らせください。お待ちしています。
|
|
|
|
| |
|
|