“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用のアドインを開発しよう!なんて思う人は少ないのでしょう。



















この記事へのコメントはありません。