VBA から参照した場合に XLL アドインのタイトルが正しく登録されない

現象

Excel 2007 以降で VBA から Application.AddIns オブジェクトを参照した場合に、XLL 形式のアドインのタイトルが、XLL アドインの xlAddInManagerInfo (または xlAddInManagerInfo12) 関数で実装したタイトルではなく、XLL ファイルの名前で登録される場合があります。

そのため、 例えば、以前のバージョンでは Application.AddIns(<アドインのタイトル>) で実行できていた VBA が、Excel 2007 以降でエラーとなることがあります。

なお、この現象は、XLL アドインの xlAddInManagerInfo 関数が VBA からの処理によって実行される場合にのみ発生します。あらかじめ、Excel 起動時に読み込む設定となっている場合や、事前に "Excel アドイン" の設定画面を参照した場合には発生しません。

原因

VBA からAddIns オブジェクトを参照した場合に、Excel 2007 以降の実装変更によって、xlAddInManagerInfo 関数が xAction 引数に xltypeMissing 型の値が渡されて呼び出されます。

xlAddInManagerInfo 関数は、xAction 引数に 1 が指定された場合のみ、タイトルとして利用されるアドインのロング ネームを返すように XLL SDK で説明されているため、xltypeMissing 型の値が渡されることにより、タイトルとして利用されるアドインのロング ネームを返せないことが原因で発生します。

回避策

方法1: XLL アドインの xlAddInManagerInfo 関数の実装を変更し、xAction 引数に xltypeMissing 型の値が渡された場合もアドインのロング ネームを返すようにする。

補足: xltypeMissing 型の値を SDK のサンプル コードのとおり、xlCoerce 関数で xltypeInt 型に変換した場合 0 が返ります。


方法2: XLL アドインが Excel 起動時に登録/読み込み済みとなるように "Excel アドイン" ダイアログでチェック オンする。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

詳細

XLL アドインのタイトルは、ファイル名 (拡張子除く) または xlAddInManagerInfo 関数が返すロング ネームのいずれかとなります。

この現象によって XLL アドインのタイトルが、ファイル名 (拡張子除く) で登録された場合、AddIns(<アドインのタイトル>) という記述の VBA がエラーになります。

回避策に記載した、いずれの手法も採用できない場合、VBA の実装変更を検討します。

例えば、読み込み済みではない状態から、VBA で Installed プロパティを変更したい場合等は、以下のような VBA で対処することができます。

Sub Install_AddIn()
Dim objAddIn As AddIn
Set objAddIn = Application.AddIns.Add("C:\Test\EXAMPLE.xll")
objAddIn.Installed = True
End Sub
また、AddIns コレクションを参照し、各 AddIn オブジェクトの Name プロパティを元に操作したい XLL アドインの AddIn オブジェクトを取得する実装を検討します。


再現手順:

  1. Excel 2007 または 2010 の XLL SDK をダウンロードします。
  2. SDK のサンプルに含まれる Example.xll をビルドします。
  3. Excel 2007 または 2010 を起動し、"Exce アドイン" ダイアログから Example.xll を登録します。
    この操作によって "Example Standalone DLL" という名前でアドインが登録されます。
  4. "Example Standalone DLL" のチェックを オフ にして、Excel を終了します。
  5. Excel 2007 または 2010 を起動します。
  6. VBE を起動します。
  7. 以下の VBA コードを実行します。

    Application.AddIns("Example Standalone DLL").Installed = True
結果:
実行時エラーが発生します。
アドインの一覧を確認すると、EXAMPLE.XLL が "Example Standalone DLL" ではなく "Example" という名前で登録されていることがわかります。

プロパティ

文書番号:2657370 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック