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

FontオブジェクトのNameプロパティからフォント変更できない文字のフォントを変更するWordマクロ前のページ

Adobe Acrobat Reader DCの「ホーム」や「ツール」を非表示にする。次のページ

関連記事

  1. Office関連

    SkyDriveの同期フォルダーのパスを取得するマクロ

    前回の記事ではSkyDriveの同期フォルダーのパスを取得するWord…

  2. アイコン一覧

    Office 2013 アイコン一覧(M)

    ・Office 2013 アイコン一覧 NUM…

  3. Office関連

    [Office 2013]コントロール日英比較表

    日本語版と英語版のOffice 2013でコントロール(コマンド)名や…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧(D)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  5. Office関連

    徹底的にSymbol(シンボル)フォントをチェックするWordマクロ

    文字列をメモ帳にコピー&ペーストすると文字化けしたり、フォント指定で検…

  6. Office関連

    フォルダ(サブフォルダ含む)内の特定の拡張子のファイルに処理を行うVBAマクロ

    「Wordマクロ サブフォルダ ファイル処理」といったキーワードでのア…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

PAGE TOP