Office関連

VBE用のCOMアドインをメモ帳で作ってみる。

“Officeアプリケーション用のCOMアドインをVisual Studioを使わずに開発する”という内容の記事を、これまでいくつか書いてきました。

開発効率や生産性はともかくとして、やり方さえ分かればメモ帳だけでもCOMアドインを作ることができるわけですが、作れるのは何もOffice用のアドインに限った話ではありません。

VBAコードを書くための環境、Visual Basic Editor(VBE)用のアドインもメモ帳だけで作ることができます。
つまり、前時代的なVBEを.NETの力で拡張することができるわけです。

今回はそのための手順をザックリ書いていきます。

  1. ソースコードを準備します。
  2. まずは適当にソースコードを書きます。

    ・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では無いので、ツールバーからコードを実行するようにしています。

  3. ソースコードのコンパイル
  4. ソースコードが用意できたら、次はコンパイルを行います。
    以下の詳しい手順は「メモ帳だけでOutlook用アドインを作ってみる。」をご参照ください。

  5. RegAsmによるレジストリへの登録
  6. コンパイルが終わったら、次はRegAsm.exeを使って、DLLファイルをレジストリに登録します。

  7. アドインとして登録
  8. 最後は登録したファイルがアドインとして利用できるよう、レジストリの編集を行います。

    キー: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イベントの実行)されるようになります。

Build_VBE_ComAddIn_Notepad_01

以上の手順でVBE用のCOMアドインを作ることができますので、貧弱なVBA開発環境にお悩みの方は、自分で好きなように拡張してみてはいかがでしょうか。

参考Webサイト

おわりに

今回の記事を書くにあたって、VBE用のCOMアドインの開発方法について調べてみましたが、「”Visual Basic Editor” “COMアドイン” “開発”」といったキーワードで検索しても、ロクな情報が出てきませんでした。

真っ先にヒットしたのが「Visual Basic Editor 用の COM アドインを構築する」だったわけですが、Office 2000とか一体何年前だよ!?…と言いたくなるくらい古い情報です(でも参考になりました)。

VBE用アドイン開発の需要の無さがうかがえますね。
有名な「MZ-Tools」のようなアドインはありますが、自らVBE用のアドインを開発しよう!なんて思う人は少ないのでしょう。

関連記事

  1. Office関連

    Excel 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

  2. Office関連

    jQuery UIのDatepickerをVBAから使用するサンプル

    2014/1/31 追記:Internet Explorerのオー…

  3. Office関連

    【2018年9月版】Microsoft Office関連の公式リンクまとめ

    Ignite 2018やOffice 2019のリリースがあり、Off…

  4. Office関連

    「個人用テンプレートの既定の場所」を設定するWordマクロ

    前回の記事で、Word 2013で個人用テンプレート(カスタム テンプ…

  5. Office関連

    Office クリップボードをマクロで操作する(MSAA)

    MSDNフォーラムに質問がありましたが、Office クリップボードを…

  6. Office アドイン

    Office 用アプリの開発資料(日本語)が公開されました。

    Office 用アプリの開発資料(日本語)が公開されました。・…

コメント

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

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP