【EXCEL VBA】右クリックメニューに独自の項目を作成する CommandBarsオブジェクト

スポンサーリンク

はじめに

ひらちんです。

自分で作成したマクロを右クリックのメニューで実行出来るように、右クリックメニューに項目を登録する方法を紹介します!

スポンサーリンク

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

With CommandBars(“Cell”).Controls.Add

.Caption = “キャプション”

End With

キャプションのところには、表示したいメニュー名を入れます。

試しに、「ひらちん」というメニューを登録しましょう。

Sub sample()
    With CommandBars("Cell").Controls.Add
    
        .Caption = "ひらちん"
    
    End With
End Sub

実行すると次のように「ひらちん」というメニュー項目が追加されます。

コマンドにマクロを登録する際には、「OnActionプロパティ」に実行したいマクロ名を登録します。

Sub sample()

    With CommandBars("Cell").Controls.Add
    
        .Caption = "ひらちん"
        .OnAction = "sample2"
    
    End With

End Sub

Sub sample2()
    MsgBox "ひらちん"
End Sub

OnActionプロパティにsample2プロシージャを登録します。

※このコードを実行すると、また「ひらちん」メニューが登録されますので、最初に作ったものは消しています。

実行してみましょう!

「ひらちん」のメニューを実行することで、メッセージ(sample2プロシージャが動いた)が表示されました。

スポンサーリンク

メニューのコマンドを削除する

コマンドを削除する場合は、次のようにコントロールのキャプションを指定してDeleteメソッドを実行します。

CommandBars(“Cell”).Controls(“キャプション”).Delete

無いメニューを指定すると、エラーになるので注意してください。

Sub sample()

    CommandBars("Cell").Controls("ひらちん").Delete
    
End Sub

メニューを初期化する

メニューを初期状態に戻すには、Resetメソッドを実行します。

ただし、このメソッドは他のアドインなどが登録したメニューもすべて消えてしまうので注意してください。

CommandBars(“Cell”).Reset

Sub sample()

    CommandBars("Cell").Reset
    
End Sub

登録する位置を指定する

メニューを登録するAddメソッドでは、登録する位置も指定出来ます。

引数の”Before”に数値を指定すると指定された数の位置にあるメニューの上に新しいメニューが作られます。

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

2番目の位置に”ひらちん”というメニューを作成する場合は次のようになります。

Sub sample()
    With CommandBars("Cell").Controls.Add(Before:=2)
    
        .Caption = "ひらちん"
    
    End With
End Sub

メニューに区切り線をつける

メニューの区切り線は「指定のメニューより下がグループの始まりだよ。」という命令で指定します。

例えば、一番上に”ひらちん”というメニューを作る前にもともと一番上にあるメニューから下がグループの始まりだよという命令を設定しておくことで、後で作られた”ひらちん”というメニューの下に区切り線が作成されることになります。

CommandBars(“Cell”).Controls(メニューの場所).BeginGroup = True

※消すときはFalse

Sub sample()
    '一番上のメニューから下がグループの始まりと設定する
  CommandBars("Cell").Controls(1).BeginGroup = True

    '一番上に”ひらちん”というメニューを作成する
    With CommandBars("Cell").Controls.Add(Before:=1)
    
        .Caption = "ひらちん"
    
    End With
End Sub

サブメニューを登録する

メニューにはサブメニューを作成することも出来ます。

CommandBars(“Cell”).Controls.Add(Type:=msoControlPopup)

メニューを作成するAddメソッドのType引数に”msoControlPopup”を指定したメニューに対して、更にAddメソッドでメニューを作成します。

そのように作成したメニューが、サブメニューとして表示されます。

一番上に”ひらちん”というメニューを作成して、更にサブメニューで”ひらちんサブ1”、”ひらちんサブ2”メニューを作成してみます。

Sub sample()

    '一番上に”ひらちん”というメニューを作成
    With CommandBars("Cell").Controls.Add(Before:=1, Type:=msoControlPopup)
    
        'キャプション設定
        .Caption = "ひらちん"
        
        'サブメニュー作成
        With .Controls.Add
            .Caption = "ひらちんサブ1"
        End With
        
        With .Controls.Add
            .Caption = "ひらちんサブ2"
        End With
            
    End With

End Sub

もちろん、ここで作ったサブメニューにも 「OnActionプロパティ」で自作のマクロを登録出来ます。

コメント

タイトルとURLをコピーしました