作成日 2005/4/16
最終更新日 2005/10/22
2.VBEのメニューにボタンを追加するには
実はVBE(Visual Basic Editor)のメニューにボタンを追加するだけなら簡単です。
(ボタンクリック時に何か処理させるとなると話は別)
Excelのメニューにボタンを追加するのとほとんど同じです。
ここではマクロの自動記録機能を使ってExcelのメニューにボタンを追加するコードを生成し、それを修正するという方針で説明します。
とりあえず、Excelのメニューにボタンを追加するコードを自動生成します。
手順は下に書いた通りです。
- Excelメニューにある[ツール]-[マクロ]-[新しいマクロの記録]を実行する。
これで、マクロの自動記録機能がONになります。
[マクロの記録]ダイアロブボックスが出ますが、何も考えないで[OK]ボタンを押しても大丈夫です。
- Excelメニューにある[ツール]-[ユーザー設定]を選択する。
- [ユーザー設定]ダイアログが表示されるので、[コマンド]タグを選択する。
- 適当なボタン(何でもいいです)を適当なメニュー(何でもいいです)にドラッグする。
これで、VBのソースが生成されると思います。
- Excelメニューにある[ツール]-[マクロ]-[記録終了]を実行する。
これで、マクロの自動記録機能がOFFになります。
※ivで追加したボタンはちゃんと削除しましょう。
Excelメニューにある[ツール]-[ユーザー設定]を選択する。
ivで追加したボタンを外に出せばいい。
とりあえず、自動生成したコードを見てみよう。
Module1
(標準モジュール)
|
Sub
マクロ1()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9 ユーザー名 : 宮崎 崇
'
'
Application.CommandBars("Standard").Controls.Add
Type:=msoControlButton, Id _
:=375, Before:=15
End Sub
|
上のソースを適当に解説します。もっと詳しい説明はここ(別ウインドウが開きます)。
- "Standard"はこれからボタンを追加するコマンドバーの名前です。
- Type:=msoControlButtonはコマンドバーに貼付けるコントロールはボタンですよと言っている。
ボタン以外にエディット、ドロップダウン、コンボボックス、ポップアップメニューが指定できるというようなことがヘルプに書いてあった。
- id:=375は追加したボタンが["-"挿入]ボタンである事を表している。
- Before:=15は追加するボタンの位置です。
とりあえず、だまされたと思って以下のようにして下さい。(太赤文字になっている部分は修正したところです。)
Module2
(標準モジュール)
|
Sub マクロ1()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9 ユーザー名 : 宮崎 崇
'
'
Application.VBE.CommandBars("標準").Controls.Add
Type:=msoControlButton, Id _
:=1,
Before:=1
End Sub
|
修正したヶ所の説明:
- .VBE:ExcelのコマンドバーではなくVisual Basic Editorのコマンドバーを取得するようにした。
- "標準":追加するコマンドバーの名前を変えた。(VBEには"Standard"という名前のコマンドバーなんてな
いか
ら。)
- Id:=1:追加するボタンを組み込みのボタンではなく、空白のカスタムコントロールにした。
(375のままではボタンが追加されなかった。)
- Before:=1:ボタンを追加する位置を変更した。(一番左に追加)(変更した理由は特にない。)
で、下が実行結果です。(分かりにくくて、ごめん。)
追加したボタンを削除するには追加したボタンのDeleteメソッドを呼び出せばいい。
ということは、追加したボタンへの参照を取得しなくちゃいけない。
(”参照”って単語ですけど、オブジェクト指向を理解していない人は自分で調べて下さい。無視してそのまま先を読んでも大丈夫で
す。)
とりあえず、ソースを下のようにしました。(太赤文字になっているヶ所が修正箇所です。番号付けた方が良かったかなぁ。)
Module3
(標準モジュール)
|
Option Explicit
Private m_CBB As CommandBarControl
Sub addButton()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9 ユーザー名 : 宮崎 崇
'
'
Set m_CBB =
Application.VBE.CommandBars("標準").Controls.Add(Type:=msoControlButton,
Id _
:=1, Before:=1)
End Sub
Sub deleteButton()
Call m_CBB.delete
End Sub
|
修正ヶ所の説明
- Option Explicit:暗黙の型宣言を禁止させるようにした。バグ取りを楽にするため。
- Private m_CBB As
CommandbarControl:プライベートフィールド(モジュールレベルの変数)の宣言。
追加したボタンへの参照をm_CBBに代入する。(追加したボタンへの参照を覚えるようにするため)
ちなみに”m_”はモジュールレベルの変数だよという意味で付けてある。
- addButton:メソッド名を変えました。
- Set m_CBB=…:Addメソッドの返り値は追加したボタンへの参照なのでこれをm_CBBに代入。
- Sub deleteButton…:ボタンを削除するメソッドを作った。
追加したボタンの見た目を変えるには追加したボタンのCaptionプロパティかFaceIDプロパティの値を変更すればいい。
下のようにソースを修正しました。(太赤文字になっているヶ所が修正箇所です。)
Module4
(標準モジュール)
|
Option Explicit
Private m_CBB As CommandBarControl
Sub addButton()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9 ユーザー名 : 宮崎 崇
'
'
Set m_CBB =
Application.VBE.CommandBars("標準").Controls.Add(Type:=msoControlButton,
Id _
:=1, Before:=1)
m_CBB.FaceId = 444
End Sub
Sub deleteButton()
Call m_CBB.delete
End Sub
|
このソースのaddButtonメソッドを実行すると、下のようになった。
※ボタンを押しても何も起こりません。(わかっていると思うけど念のため。)
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。