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

    JPEG画像の回転情報を変更するVBAマクロ

    mougに「マクロでJPEG画像のExif(Orientation)を…

  2. Office関連

    UIAutomationClient参照時にDLL読み込みエラーが発生した時の対処法

    マクロでダイアログやボタンの操作を行う時に便利なUI Automati…

  3. Office関連

    ビジネスITアカデミーの無料VBAセミナーに行ってきました。

    Excel MVPの伊藤さんやWord MVPの新田さんのブログ記事で…

  4. Office関連

    Wikipediaの検索予測キーワードの一覧を取得するVBAマクロ

    Wikipediaのサーチボックスにキーワードを入力すると、入力したキ…

  5. Excel

    リボンのタブを選択するVBAマクロ

    マクロでリボンのタブを選択する方法として、ActivateTabやAc…

  6. Office関連

    クイックアクセスツールバーから履歴を表示するWordテンプレート

    Word MVPの新田さんのブログで「【Word 2013】クイックア…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP