Excelのセル上にて右クリックした際に表示されるメニューに独自項目を追加し、任意のマクロを呼び出すアドオンを作成する。
まずはvbaのエディタを起動し、標準モジュールを作成し、以下のコードを記載する。
Module1.vb
Const MENU_1 As String = "test"
' アドインの追加を行った際に動く処理を定義
Sub addinInstall()
' cellの右クリックをした時のオブジェクトを取得
Dim cbrCmd As CommandBar
Set cbrCmd = Application.CommandBars("cell")
Call addControl(cbrCmd, MENU_1)
Set cbrCmd = Nothing
End Sub
' アドインの削除を行った際に動く処理を定義
Sub addinUninstall()
' cellの右クリックをした時のオブジェクトを取得
Dim cbrCmd As CommandBar
Set cbrCmd = Application.CommandBars("cell")
Call deleteControl(cbrCmd, MENU_1)
Set cbrCmd = Nothing
End Sub
' コントロールの追加
Function addControl(cbrCmd As CommandBar, caption As String)
' 同名のコントロールが存在しない場合
If hasControls(cbrCmd, caption) = False Then
' ボタンを追加する。before:=1と指定することでメニューの一番上に追加となる。デフォルトは末尾に追加。
With cbrCmd.Controls.Add(Type:=msoControlButton, Before:=1)
' ボタンの名称を指定
.caption = caption
' ボタンを押下した際に動かすマクロ関数名を指定。ここではcaptionと同じとした。
.OnAction = caption
End With
End If
End Function
' コントロールの削除
Function deleteControl(cbrCmd As CommandBar, caption As String)
' 指定されたコントロールが存在する場合
If hasControls(cbrCmd, caption) Then
' コントロールを削除する
cbrCmd.Controls(caption).Delete
End If
End Function
' コントロールの存在チェック
Function hasControls(cbrCmd As CommandBar, caption As String) As Boolean
For Each Control In cbrCmd.Controls
If Control.caption = caption Then
hasControls = True
Exit Function
End If
Next
hasControls = False
End Function
' 任意のマクロ処理
Sub test()
MsgBox ("test")
End Sub
次にアドインの追加・削除をした際に、定義した内容が呼び出されるようにイベント設定をする。
ThisWorkBook
' アドイン追加時のイベント
Private Sub Workbook_AddinInstall()
Call addinInstall
End Sub
' アドイン削除時のイベント
Private Sub Workbook_AddinUninstall()
Call addinUninstall
End Sub
vbaエディタを閉じ、Bookを「Excelアドイン(*.xlam)」形式で保存する。
次にExcelのメニューからファイル→オプション→アドイン→設定を押下する。
参照から先ほど保存したアドインを指定し、一覧からチェックをする。
これでアドインが追加され、メニューに追加されるはず。
逆に一覧からチェックを外せばアドイン削除時のイベントが動き、メニューから削除されるはず。