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関連

    「クイックアクセスツールバーからPowerPointマクロを実行するアドイン」のコード

    2年ほど前に書いたPowerPointマクロの記事「クイックアクセスツ…

  2. Office関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  3. Office アドイン

    [Officeアドイン]組み込みのワークシート関数を呼び出す方法

    下記記事でOffice アドインから独自のユーザー関数を呼び出す方法を…

  4. Office アドイン

    [Officeアドイン]図形挿入アドイン

    最近まほうのルミティアとかプリキュア、オトカドールの記事ばかり書くこと…

  5. Excel

    名前空間を指定してXPathで要素を取得するVBAマクロ

    Tech Communityに、“XPathで名前空間プレフィックス付…

  6. アイコン一覧

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

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

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP