VBA 第5章 メニューの操作【完了】

1.メニューにコマンドを登録する

CommandBars(“Cell”).Contols.Add

object.Caption

Exel2007からメニューバーとツールバーが廃止されました。しかし、右クリックした際に表示されるコンテキストメニューは従来通りの機能が残されています。独自のマクロなどをコンテキストメニューに登録すれば、従来のバージョンと同じ操作性を実現します。メニューはCommandBarオブジェクトで操作します。セルのコンテキストメニューの名前はCellです。メニュー項目を表すControlsコレクションに新しいコマンドをAddメソッドで追加します。メニューに表示される文字列は、Captionプロパティに指定します。

 

2.コマンドを削除する

CommandBars(“Cell”).Contols(string).Delete

登録したコマンドを削除するときは、Deleteメソッドを実行します。存在しないコマンドを削除しようとするとエラーになります。

 

3.メニューを初期化する

CommandBars(“Cell”).Reset

メニューを初期状態に戻すには、CommandBarオブジェクトのResetメソッドを実行します。ただし、安易にResetメソッドを実行しないように注意してください。初期化すると、他のアドインなどが登録したコマンドなども全て消えてしまいます。自分で登録したコマンドを消すのであれば、初期状態にするのではなく、自分で登録したコマンドだけを削除してください。メニューは共有スペースです。

 

4.登録する位置を指定する

CommandBars(“Cell”).Controls.Add(Before)

コマンドを登録するAddメソッドでは、登録する位置を指定できます。引数Beforeに数値を指定すると、指定された数の位置にあるコマンドの上に、新しいコマンドが登録されます。

 

5.コマンドにマクロを登録する

CommandBars(“Cell”).Controls.add

object.OnAction

登録したコマンドにマクロを設定するには、OnActionプロパティにしたいプロシージャの名前を登録します。

 

6.コマンドに区切り線をつける

CommandBars(“Cell”).Controls.BeginGroup

CommandBars(“Cell”).Controls.Add(Before)

コマンド間の区切り線は、コマンドとコマンドの間に線を引いているのではなく、区切り線の下になるコマンドに「ここからグループの始まり」という設定をします。サンプルではAddメソッドによって、新しいコマンドを1案目にあるコマンドの手前に登録いています。そこで、それまで1番上にあったコマンドにあらかじめグループの始まりであると設定しておきます。それが、BeginGroup = Trueです。区切り線を消すには、BeginGroup = Falseとします。

 

7.コマンドにアイコンを表示する

CommandBars(“Cell”).Controls.Add

object.FaceId

コマンドにアイコンを表示するには、FaceIdプロパティにアイコンを表す数値を指定します。

 

どの数値がどんなアイコンなのかは、ヘルプ等では公開されていません。

8.既存の機能を割り当てる

メニューに登録するコマンドには、自作のマクロだけでなく、Excelが標準で有している機能を登録することも可能です。標準機能を割り当てるには、Addメソッドの引数IDに機能を表すID番号を指定します。サンプルは、ファイルを開くの機能を登録してコマンド名をMacro1としました。

 

どの機能のIDが何番かは、ヘルプなどでは公開されていません。

9.コマンドが押された状態にする

CommandBars(“Cell”).Controls.Add

object.State

コマンドのアイコンが押された状態にするためには、StateプロパティにTrueを設定します。FaceIdが設定されていると、そのアイコンが押されたように表示され、FaceIdが設定されていないと下の画面のようにチェックマークが表示されます。

 

10.サブメニューを追加する

CommandBars(“Cell”).Controls.Add(Before, msoControlPopup)

メニューにサブメニューを登録するには、Addメソッドの引数Typeに定数msoControlPopupを指定します。こうして登録したコントロールはサブメニューになるので、そのサブメニューにあらたなコマンドを登録します。

 

11.実行されたコマンドを判定する

CommandBars(“Cell”).Controls.Add

CommandBars.ActionControl.Caption

プロシージャ側で、実行されたコマンドを取得するには、CommandBarsコレクションのActionControlプロパティを使います。ActionControlプロパティには、実行されたコマンドが格納されるので、Captionプロパティを調べればコマンドの文字列が分かります。

 

12.コマンドを表示・非表示にする

CommandBars(“Cell”).Controls.Visible

コマンドの表示・非表示を切り替えるには、VisibleプロパティにTrueまたはFalseを設定します。

 

13.状況に応じて変化するメニューを設定する

CommandBars(“Cell”).Controls.Add

object.OnAction

サブメニューはクリックしたりマウスポインタを合わせた時、下位のメニューが表示されます。このとき、サブメニューのOnActionプロパティに設定したプロシージャが実行されます。それを応用すれば、状況に合わせて自動的にメニューの内容を変更できます。サンプルではサブメニューのCommand1とCommand2にアクティブセルのアドレスや行番号を表示しています。

 

14.安全にコマンドを削除する

CommandBars(“Cell”).Controls.Add

object.Tag object.Delete

メニューは共有スペースです。自分で登録したコマンドを削除するときは、自分で登録したコマンドだけを確実に削除するようにしてください。くれぐれも安易にリセットしてはいけません。コマンド名だけでは、それが本当に自分でマクロを登録したか判断できないときは、登録するときにあらかじめTagプロパティに印をつけておきます。削除するときは、そのTagプロパティを確認してから削除します。

 

コメントを残す

メールアドレスが公開されることはありません。