“Officeアプリケーション用のCOMアドインをVisual Studioを使わずに開発する”という内容の記事を、これまでいくつか書いてきました。
- メモ帳だけでOutlook用アドインを作ってみる。
- //www.ka-net.org/blog/?p=5517
- VBAから扱えるDLLをC#で書いてみる。
- //www.ka-net.org/blog/?p=5464
- SharpDevelopでExcel用COMアドインを作成する方法
- //www.ka-net.org/blog/?p=5309
開発効率や生産性はともかくとして、やり方さえ分かればメモ帳だけでもCOMアドインを作ることができるわけですが、作れるのは何もOffice用のアドインに限った話ではありません。
VBAコードを書くための環境、Visual Basic Editor(VBE)用のアドインもメモ帳だけで作ることができます。
つまり、前時代的なVBEを.NETの力で拡張することができるわけです。
今回はそのための手順をザックリ書いていきます。
- ソースコードを準備します。
- ソースコードのコンパイル
- RegAsmによるレジストリへの登録
- アドインとして登録
まずは適当にソースコードを書きます。
・MyVbeAddIn.cs
namespace MyVbeAddIn{ using System; using System.Windows.Forms; using System.Runtime.InteropServices; using Extensibility; using Office = Microsoft.Office.Core; using VBIDE = Microsoft.Vbe.Interop; //Guidは要変更 [ComVisible(true), Guid("F2D6539C-8F17-488D-A176-02DAB959823A"), ProgId("MyVbeAddIn.Connect")] public class Connect : Object, Extensibility.IDTExtensibility2{ private VBIDE.VBE app; private Office.CommandBar cmdBar; private Office.CommandBarButton cmdBtn; public Connect(){} public void OnConnection(object application, ext_ConnectMode ConnectMode, object AddInInst, ref System.Array custom){ app = ((VBIDE.VBE) application); cmdBar = app.CommandBars.Add("MyCommandBar", Office.MsoBarPosition.msoBarFloating, false, true); cmdBtn = (Office.CommandBarButton)cmdBar.Controls.Add(Office.MsoControlType.msoControlButton, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing); cmdBtn.Caption = "My Button"; cmdBtn.FaceId = 59; cmdBtn.Click += new Office._CommandBarButtonEvents_ClickEventHandler(cmdBtn_Click); cmdBar.Visible = true; } public void cmdBtn_Click(Office.CommandBarButton ctrl, ref bool cancel){ try{ app.ActiveCodePane.CodeModule.InsertLines(1, "'Hello World!!"); }catch (Exception){ MessageBox.Show("エラーが発生しました。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } public void OnDisconnection(ext_DisconnectMode RemoveMode, ref System.Array custom){ if(cmdBtn != null){ Marshal.ReleaseComObject(cmdBtn); cmdBtn = null; } if(cmdBar != null){ cmdBar.Delete(); Marshal.ReleaseComObject(cmdBar); cmdBar = null; } if(app != null){ Marshal.ReleaseComObject(app); app = null; } GC.Collect(); GC.WaitForPendingFinalizers(); } public void OnAddInsUpdate(ref System.Array custom){} public void OnStartupComplete(ref System.Array custom){} public void OnBeginShutdown(ref System.Array custom){} } }
「メモ帳だけでOutlook用アドインを作ってみる。」と違って、VBEはリボンUIでは無いので、ツールバーからコードを実行するようにしています。
ソースコードが用意できたら、次はコンパイルを行います。
以下の詳しい手順は「メモ帳だけでOutlook用アドインを作ってみる。」をご参照ください。
コンパイルが終わったら、次はRegAsm.exeを使って、DLLファイルをレジストリに登録します。
最後は登録したファイルがアドインとして利用できるよう、レジストリの編集を行います。
キー:HKEY_CURRENT_USER\Software\Microsoft\VBA\VBE\6.0\Addins\MyVbeAddIn.Connect
Description(REG_SZ):サンプルVBEアドインです。
FriendlyName(REG_SZ):My VBE AddIn
LoadBehavior(REG_DWORD):3 (スタート時に読み込む)
以上の作業を行った後VBEを起動すると、新しくツール バーが作成され、ツール バー上のボタンをクリックすることで、「Hello World!!」というコメントがコードに挿入(cmdBtn_Clickイベントの実行)されるようになります。
以上の手順でVBE用のCOMアドインを作ることができますので、貧弱なVBA開発環境にお悩みの方は、自分で好きなように拡張してみてはいかがでしょうか。
参考Webサイト
- Visual Basic Editor 用の COM アドインを作成する
- https://msdn.microsoft.com/ja-jp/library/cc376346.aspx
- エクセルユーザのOffice 2000 Developer-VBA開発支援Comアドイン
- http://www.moug.net/tech/exvba/0150060.html
- VBE Object (VBA Add-In Object Model) (Visual Basic Add-In Model)
- https://msdn.microsoft.com/en-us/library/aa443984.aspx
- 方法: Office ツール バーを作成する
- https://msdn.microsoft.com/ja-jp/library/scff9c7c.aspx
- Tips and Tricks: Building Microsoft Office Add-ins with Visual C# .NET and Visual Basic .NET
- https://msdn.microsoft.com/en-us/library/aa289518.aspx
- Chapter 7: Office COM Add-Ins
- https://msdn.microsoft.com/en-us/library/aa662931.aspx
- HOWTO: ボタンと commandbars とツールバーを Visual Studio .NET にアドインから追加します。
- https://support.microsoft.com/ja-jp/kb/555326
おわりに
今回の記事を書くにあたって、VBE用のCOMアドインの開発方法について調べてみましたが、「”Visual Basic Editor” “COMアドイン” “開発”」といったキーワードで検索しても、ロクな情報が出てきませんでした。
真っ先にヒットしたのが「Visual Basic Editor 用の COM アドインを構築する」だったわけですが、Office 2000とか一体何年前だよ!?…と言いたくなるくらい古い情報です(でも参考になりました)。
VBE用アドイン開発の需要の無さがうかがえますね。
有名な「MZ-Tools」のようなアドインはありますが、自らVBE用のアドインを開発しよう!なんて思う人は少ないのでしょう。
この記事へのコメントはありません。