マクロのある暮らし(13回目) - アドインであそぶ
こんにちは!なるーらぼです!
今回はフォームのあるマクロの続きというか関連で、アドインをつくってみたいと思います。
アドインというのは拡張機能みたいなものなのですが、よく使うもの(自作関のコマンドなど)は登録しておくと便利です。
アドイン
わたしも今回のことで調べなおしていたので時間もかかったのですが、どうやら昔からあるのに少しずつ変化しているようです。現在のリボンインターフェースで利用するには、XMLでリボンをつくるようになるようなのですが面倒といえば面倒なので今回はいにしえから伝わる方法でやってみます。
さらに、手元の環境がExcel2016なのでいにしえの方法といってもさらに少し違います。太古のむかしはアドインブックのWorkbook_Openイベントで登録しておいて、その登録のときに「一時的なものだよ」と明示しておけば削除してくれていたようです。
しかし、現代においてはそれはされません(Excel2013以降)。
ですから、登録や削除の方法については現代風にお話ししたいと思います。
お題
今回は「note.mu」をブラウザで開くというアドインをつくってみます。
え?Windows10からはIEがいないって?COMで呼び出せないし…ということですが、ごくごく普通の方法で起動します。
VBAには組み込みで「Shell関数」というやつがいますので、こちらに「startコマンド」を実行させることで既定のブラウザで開くようにします。
アドインの処理は普通にマクロを記述すればいいのですが、現代においては3つのサブルーチンが必要です。
まず1つ目は実際に動作するサブルーチンです。アドインが実行されるときに実際に動作するアクションはPublicになっているサブルーチンになります。このとき、引数は指定しません。今回はこんな感じです。
Sub OpenMyHeart()
Shell "cmd /C start https://note.mu"
End Sub
名前はなんでもいいのですが、今回はなんとなく…
上記で「?」となりそうなのが「cmd /C」ですが、これはコマンドプロンプトを起動するもので、続くコマンドの実行が終了したらコマンドプロンプトも終了するということになります。「startコマンド」はコマンドプロンプト組み込みのコマンドなのでこのようにしているのです。
次に、2つ目です。これはアドインをインストールするときに発生するイベントです。アドインはオプションから登録することになります。
表示されるオプション画面から「アドイン」をクリックします。
さらにアドイン画面になったら画面下部にある「管理」をクリックすると利用するアドインを選択することができます。
ここでチェック入れてOKとするとインストールされるのですが、このときに何をするかを「Workbook_AddinInstall」イベントプロシージャに記述するようになります。
今回は次のようにしました。
Private Sub Workbook_AddinInstall()
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(msoControlButton)
.BeginGroup = True
.Caption = "note mu"
.FaceId = 1016
.TooltipText = "既定のブラウザでnote.muを開きます"
.DescriptionText = "既定のブラウザでnote.muを開きます"
.OnAction = "OpenMyHeart"
End With
Application.StatusBar = "アドイン[note mu]がインストールされました"
DoEvents
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 2)
Application.StatusBar = False
End Sub
コマンドバーというものがApplicationオブジェクトで管理されています。このうちのいずれかへコントロールとしてコマンドバーボタンなどを追加します。そして、このボタンなどのコントロールへ「OnAction」プロパティとして実行してほしいサブルーチン名を指定するようにします。
FaceIdプロパティはアイコンになるのですが、今回はブラウザ(いにしえの)でホームを表すアイコンになるものを指定しています。
最後に、アドイン管理からチェックを外してOKされたときの処理を「Workbook_AddinUninstall」イベントプロシージャに書きます。
Private Sub Workbook_AddinUninstall()
Dim cb As CommandBarControl
With Application.CommandBars("Worksheet Menu Bar")
For Each cb In .Controls
If cb.Caption = "note mu" Then
cb.Delete
Exit For
End If
Next
End With
Application.StatusBar = "アドイン[note mu]がアンインストールされました"
DoEvents
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 2)
Application.StatusBar = False
End Sub
こちらは逆にキャプションが「note mu」になっているコントロールをDeleteメソッドで削除しています。こうすることでチェックを外したら利用できるアドインから外されるようにしています。
アドインの場所
アドインにするにはブックの拡張子を「.xla」か「.xlam」にする必要があります。また、保存場所も限定されているようです。どこに保存されているかわからないなーと思ったら「Application.UserLibraryPath」をチェックしてみてください。アドインが保存された場所がわかると思います。
C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\AddIns\
になっているはずです。
使ってみる
では作成したアドインを使ってみます。
2秒間だけステータスバーに「インストールされました」が表示されるので確認してみてください。アドインタブを見ると…
「ちっさ!!」と思うくらい小さいアイコンが表示されます。アイコンにマウスポインタを合わせると、申しわけ程度にツールチップも表示されます。
最後に
アドインはよく利用する機能を登録しておくと便利です。たとえば、今回はワークシートメニューバーにしていますが、セルにしておくとセル上で右クリックしたときのメニューに表示することができます。
セルを一括編集したりするのに便利だと思います。いろんな用途が期待できますので試してみてください。ただ、用法用量は正しくお使いください。
この記事が気に入ったらサポートをしてみませんか?