作成日 2005/4/16
最終更新日 2005/10/22

2.VBEのメニューにボタンを追加するには

 実はVBE(Visual Basic Editor)のメニューにボタンを追加するだけなら簡単です。 (ボタンクリック時に何か処理させるとなると話は別)
 Excelのメニューにボタンを追加するのとほとんど同じです。
 ここではマクロの自動記録機能を使ってExcelのメニューにボタンを追加するコードを生成し、それを修正するという方針で説明します。

1.Excelのメニューにボタンを追加するコードを自動生成する
2.自動生成したコードの解説
3.自動生成したコードを修正してVBEのメニューにボタンを追加
4.VBEのメニューに追加したボタンを削除
5.VBEのメニューに追加したボタンの見た目を変える

1.Excelのメニューにボタンを追加するコードを自動生成する

 とりあえず、Excelのメニューにボタンを追加するコードを自動生成します。
 手順は下に書いた通りです。
  1. Excelメニューにある[ツール]-[マクロ]-[新しいマクロの記録]を実行する。
    これで、マクロの自動記録機能がONになります。
    エクセルのマクロ自動機能をONにする

    [マクロの記録]ダイアロブボックスが出ますが、何も考えないで[OK]ボタンを押しても大丈夫です。
  2. Excelメニューにある[ツール]-[ユーザー設定]を選択する。
  3. [ユーザー設定]ダイアログが表示されるので、[コマンド]タグを選択する。
  4. 適当なボタン(何でもいいです)を適当なメニュー(何でもいいです)にドラッグする。
    これで、VBのソースが生成されると思います。
    Excelメニューにボタンを追加

  5. Excelメニューにある[ツール]-[マクロ]-[記録終了]を実行する。
    これで、マクロの自動記録機能がOFFになります。

※ivで追加したボタンはちゃんと削除しましょう。
Excelメニューにある[ツール]-[ユーザー設定]を選択する。
ivで追加したボタンを外に出せばいい。
Excelのメニューからボタンを削除

このページのトップへ

2.自動生成したコードの解説

 とりあえず、自動生成したコードを見てみよう。
Module1 (標準モジュール)
Sub マクロ1()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9  ユーザー名 : 宮崎 崇
'

'

    Application.CommandBars("Standard").Controls.Add Type:=msoControlButton, Id _
        :=375, Before:=15
End Sub

 上のソースを適当に解説します。もっと詳しい説明はここ(別ウインドウが開きます)。
  1. "Standard"はこれからボタンを追加するコマンドバーの名前です。
  2. Type:=msoControlButtonはコマンドバーに貼付けるコントロールはボタンですよと言っている。
    ボタン以外にエディット、ドロップダウン、コンボボックス、ポップアップメニューが指定できるというようなことがヘルプに書いてあった。
  3. id:=375は追加したボタンが["-"挿入]ボタンである事を表している。
  4. Before:=15は追加するボタンの位置です。
このページのトップへ

3.自動生成したコードを修正してVBEのメニューにボタンを追加

 とりあえず、だまされたと思って以下のようにして下さい。(太赤文字になっている部分は修正したところです。)
 
Module2 (標準モジュール)
Sub マクロ1()
'
' マクロ1 Macro
' マクロ記録日 : 2005.4.9  ユーザー名 : 宮崎 崇
'

'

    Application.VBE.CommandBars("標準").Controls.Add Type:=msoControlButton, Id _
        :=1, Before:=1

End Sub

   
 修正したヶ所の説明:
  1. .VBE:ExcelのコマンドバーではなくVisual Basic Editorのコマンドバーを取得するようにした。
  2. "標準":追加するコマンドバーの名前を変えた。(VBEには"Standard"という名前のコマンドバーなんてな いか ら。)
  3. Id:=1:追加するボタンを組み込みのボタンではなく、空白のカスタムコントロールにした。
    (375のままではボタンが追加されなかった。)
  4. Before:=1:ボタンを追加する位置を変更した。(一番左に追加)(変更した理由は特にない。)
 
 で、下が実行結果です。(分かりにくくて、ごめん。)
VBEのメニューにボタンを追加した結果

このページのトップへ

4.VBEのメニューに追加したボタンを削除

 追加したボタンを削除するには追加したボタンの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

 修正ヶ所の説明
  1. Option Explicit:暗黙の型宣言を禁止させるようにした。バグ取りを楽にするため。
  2. Private m_CBB As CommandbarControl:プライベートフィールド(モジュールレベルの変数)の宣言。
    追加したボタンへの参照をm_CBBに代入する。(追加したボタンへの参照を覚えるようにするため)
    ちなみに”m_”はモジュールレベルの変数だよという意味で付けてある。
  3. addButton:メソッド名を変えました。
  4. Set m_CBB=…:Addメソッドの返り値は追加したボタンへの参照なのでこれをm_CBBに代入。
  5. Sub deleteButton…:ボタンを削除するメソッドを作った。
このページのトップへ

5.VBEのメニューに追加したボタンの見た目を変える

 追加したボタンの見た目を変えるには追加したボタンの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メソッドを実行すると、下のようになった。
VBEのメニューにボタンを追加し、画像を変更した結果

 ※ボタンを押しても何も起こりません。(わかっていると思うけど念のため。)
Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。