Excelで[アドインを作成]&[メニューを追加]

Excel VBAでやりたいことがあるので、暇を見て色々調べものをする予定。

それで、①アドインの作成方法と②メニューの作成方法を調べてみたので、

書いておきます。

環境はExcel 2010です。

①アドインの作成方法

拡張子を.xlamにして保存します。

これで[ファイル]-[オプション]-[アドイン]-[管理:Excelアドイン]-[設定]を押して、

アドインダイアログを開いてから、[参照]ボタンを押して保存したファイルを

指定するとアドインのリストに登録されます。

この時点では登録しても何もしないので、

これから先ほど保存したファイルに色々機能を追加します。

②メニューの作成方法

アドインとしてインストールしている場合、

[開発]-[VisualBasic]で[Microsoft Visual Basic for Applications]を開くと、

アドインファイルを編集することができます。

該当のアドインファイルの構成として、

[Microsoft Excel Object]と[標準モジュール]があり、

今回は[Microsoft Excel Object]内の[ThisWookbook]を編集します。

a.アドインインストール時に実行する処理の登録方法

参考:http://www.happy2-island.com/excelsmile/smile03/capter01002.shtml

[ThisWookbook]内に以下のコードを追加

Private Sub Workbook_AddinInstall()

    'ここに処理を記載

Sub End

Workbook_AddinInstall関数の中に書かれた処理がアドインのインストール時に実行されます。同様にWorkbook_AddinUninstall関数はアドインのアンインストール時に実行されます。

b.メニューの追加方法

参考:http://www.happy2-island.com/excelsmile/smile03/capter00709.shtml

Private Sub Workbook_AddinInstall()

    Dim cbrCmd As CommandBar

    Dim cbcMenu As CommandBarControl

    Set cbrCmd = Application.CommandBars("Worksheet Menu Bar")

    Set cbcMenu = cbrCmd.Controls.Add(Type:=msoControlPopup)

    cbcMenu.Caption = "メニュー1"

    With cbcMenu.Controls.Add(Type:=msoControlButton)

        .Caption = "ボタン1"

        .OnAction = "prcButton1"

    End With

Exit Sub

上記のコードで独自メニューとボタンを1つ作成することができます。

Application.CommandBars("Worksheet Menu Bar")

コマンドバ―オブジェクトを作成。 

Set cbcMenu = cbrCmd.Controls.Add(Type:=msoControlPopup)

メニューを追加して、そのオブジェクトを取得。

cbcMenu.Caption = "メニュー1"

メニュー名を設定。

って感じです。

c.メニューの削除方法

参考:http://www.happy2-island.com/excelsmile/smile03/capter00711.shtml

アドインでメニューを追加した場合、アンインストール時に

メニューの削除処理をしないと、そのまま残り続けてしまいます。

なので、削除処理も追加。

Private Sub Workbook_AddinUninstall()

    On Error GoTo ErrHand

    With Application.CommandBars("Worksheet Menu Bar")

        .Controls("メニュー1").Delete

    End With

    Exit Sub

ErrHand:

    If Err.Number = 5 Then

       Resume Next

    Else

       MsgBox Err.Description

    End If

End Sub

エラー処理がありますが、メニューバーに指定したメニューの名前が

入っていないとエラーになるとか。

エラー処理はほぼコピペなので、内容はまだ把握していません。

終わりに…

これで、アドインをインストールすると、メニューを表示することができます。

なお、[ThisWookbook]に今回の処理を記載していますが、

[標準モジュール]内のファイルに同様の処理を書いても機能しませんでした。

VBAの仕組み自体の理解が足りていないので、それぞれのファイルの役割とか

もう少し確認する必要がありそうです。
あと、はてな記法(コードを強調する方法)を有効にする方法が分からずに疲れた…