PowerPointVBAからRegistration-Freeで.NETベースのDLLを呼び出す方法Office関連2015.09.7VBAからRegistration-Freeで.NETベースのDLLを呼び出す方法C#製のDLLをVBAから呼び出すのにいちいちRegAsmするのも面倒くさいなー、と思っていたところ、数年前のkumattiさんのツイートを思い出しました。XL2013CPの件はこれで解決。12そういえばMicrosoft.Windows.ActCtxオブジェクトを使えばレジストリ登録不要でCOMコンポーネント呼び出せたなー、と。COMhttp://dev.activebasic.com/egtra/2012/07/07/498/.NETでのRegFree-COMhttp://dev.activebasic.com/egtra/2014/10/06/685/やったことないし、一回くらいはやってみるか!・・・というわけで、さっそく試してみることにしました。ソースコードの準備まずは呼び出すDLLのコードをC#で書きます。}}文字列を返すだけの単純なコードです。コンポーネントを構成する」を参考に、DLLに埋め込むマニフェストファイルを作成します。マニフェストはリソースとしてアセンブリに埋め込む必要があります”とあるので、記載されている手順に従うことにします。VB.NET」によるとGoRC.exeでもリソースのコンパイルができるようなので、これを使うことにします。tools」から「Gorc.zip」ファイルをダウンロードして、「C:\System\Gorc」フォルダに解凍します。上記手順で作成したマニフェストファイル(SampleNameSpace.manifest)をGoRC.exeと同じフォルダ(C:\System\Gorc)にコピーします。テキストエディタで下記ファイルを作成します。SampleNameSpace.manifest下記コマンドを実行し、リソース(res)ファイルを作成します。"SampleNameSpace.rc"作成したSampleNameSpace.resファイルを「C:\System」フォルダにコピーします。ソースコードのコンパイルリソースファイルの準備ができたら、次はコンパイル(/win32resオプションでリソースファイル指定)してDLLを作成します。"C:\System\SampleNameSpace.cs"問題が無ければ「C:\System」フォルダに「SampleNameSpace.dll」ファイルが作成されます。VBAからの呼び出しVBAから呼び出す前に、呼び出し元(クライアント側)のマニフェストファイルを準備します。</dependency></assembly>マニフェストファイルの準備ができたら、いよいよVBAからの呼び出しです。SubProgIdを指定してMicrosoft.Windows.ActCtx.CreateObjectメソッドを呼び出して、上手くいけばHogeメソッドの結果がメッセージボックスで表示されるはずです。指定されたファイルが見つかりません。VBA」を見ると、“DLLをVBAの実行元(ExcelならEXCEL.EXE)と同じフォルダに置いたら動いた”とのことだったので、DLLファイルをOfficeのインストールフォルダにコピーして再実行したところ、無事にコードが実行できました。RegAsmしたくないからMicrosoft.Windows.ActCtxオブジェクトを使ったというのに、結局Officeフォルダへのコピーが必要とは・・・。これなら素直にRegAsmした方がマシなような気がします。したら、コピー不要でDLLを呼び出す方法があるのかもしれませんが、そこまで調べきれていないので、何か進展があったらまた追記することにします。中途半端なオチですが、参考にしたWebサイトとともにメモとして残しておきます。EdgeのURL制限は2083文字なのか調べてみた。追記:下記で紹介しているコードはセルの結合を考...Office関連PDFファイルにヘッダーとフッターを追加するVBAマクロmougに“マクロで既存のPDFファイルのフッターを操作(追加)したい...Office関連[リボン・カスタマイズ]checkBox要素のチェック状態を動的に設定する。(0)トラックバックは利用できません。この記事へのコメントはありません。返信をキャンセルする。API]他形式での出力とサイ...他形式での出力とサイズ変更を行う※2020年1月現在、Photoshop...2020.01.30第7回デルアンバサダー座談会が豪華過ぎて驚愕した話...1月24日(金)に“デルアンバサダー座談会”が開催されました。APIはベータ版です。アドインやリボンのカスタマイズに関する話題を中心に情報発信しています。