_ Excelカスタム関数を含むアドインを作成した場合、関数はExcelワークシートでは正常に機能しますが、他のブックのVBAプロシージャでは使用できないことに気付いたかもしれません。これは、Visual BasicEditorがそれらを_見る_ことができないかのようです。まあ、それはできないからです!この記事では、それを修正する方法について説明します。_まず、これが本当にやりたいことかどうかを検討します。

アドインは、主にワークブックに機能を追加することを目的としています。 Excelアドインをロードすると、その機能がすべてのブックですぐに使用できるようになります。別のブックに含まれているカスタム関数に依存するVBAプロシージャを作成する場合、その関数を使用するときはいつでも、その別のブックを開く必要があります。アドインのカスタム関数についても同じことが言えます。アドインがロードされている場合は問題ありませんが、ワークブックを他の人にメールで送信するか、ワークグループに配布するとします。アドインも配布することを忘れないでください。関数のコピーをブックコードに含めて、プロシージャが直接アクセスできるようにする方が簡単な場合があります(名前の競合を避けるために、関数を_プライベート関数_にするか、名前を変更する必要がある場合があります)。

私はそれをしないと言っているのではありません。最初にそれについて考える必要があります。アドインが利用可能になることが確実な場合は、先に進んでください。方法は次のとおりです…​

問題はいつ発生しますか?

私は自分のワークブックの1つの手順を書いています。私の手順では、しばらく前に作成し、現在Excelのコピーにインストールされている_MartinのFunctions_Add-Inに保存した_RemoveSpaces_関数を使用したいと思います。しかし、プロシージャを実行しようとすると、エラーが発生します。

Visual Basic Editorは関数が存在しないかのように動作しますが、存在することはわかっており、アドイン内のコードを見るとわかります。実際、アドイン内から実行すると、コードは正常に機能します。

_異なる_ワークブックのコードモジュール内からアドインの関数を_表示_できるようにするには、Visual BasicEditorが必要です。

アドインにVBAプロジェクト名を付けるすべてのブックにはVBAプロジェクト名があります。それは_VBAProject_と呼ばれます。必要に応じてその名前を変更できますが、通常は問題ではないため、通常は気にしません。

Visual BasicEditorの_ProjectExplorer_ペインに表示されるすべてのワークブックがなぜ「VBAProject」と呼ばれるのか疑問に思ったことはありませんか。 Microsoftのアドインのいずれかがインストールされている場合は、それらの名前が異なることがわかります。 Microsoft開発者は、_AnalysisToolPak_アドインにVBAプロジェクト名「funcres」を付けました。

最初に行うことは、アドインに一意のVBAプロジェクト名を付けることです。

これは、次の手順でこの名前で参照するためです。同じ名前の名前が複数ある場合、Visual BasicEditorはどちらを使用するかわかりません。

_Project Explorer_ペインで、アドインの名前を選択します。まだ開いていない場合は、Visual BasicEditorの_プロパティウィンドウ_を表示します。プロパティは_Name_だけであることがわかります。別の名前を入力してEnterキーを押します。 VBAの通常の命名規則に従う必要があります(つまり、違法な文字やスペースは使用しないでください)。名前が_ProjectExplorer_ですぐに適用されることがわかります。

次に、変更をアドインに保存します。 _Project Explorer_でアドインが選択されていることを確認し、[ファイル]> [保存]を選択します。

アドインへの参照を設定するこのステップでは、アドインの機能を使用するワークブックに、アドインが存在することを通知します。これを行うには、アドインへの_参照の設定_を行います。 _Outlook_や_Access_などの別のプログラムと通信するためのExcelコードを記述したい場合は、以前にこの手法に出くわしたことがあるかもしれません。

都合がよければ、この時点でExcelを再起動します。これは、名前を変更したアドインが再読み込みされ、表示しようとしているリストが更新されるためです。都合が悪い場合でも、気にしないでください…​次の段落を読んで、何をしたいかを決めてください。

アドインの機能を使用するワークブックでコードモジュールを開き、[ツール]> [参照]に移動して[参照]ダイアログを開きます。このダイアログには、すべてのライブラリとその他のオブジェクト(アドインなど)のリストが表示されます。参照を設定できます。 Excelを再起動すると、このリストが更新され、最後の手順でアドインに付けたプロジェクト名を見つけることができます。名前の横のボックスにチェックマークを付けて、[OK]ボタンをクリックします。

Excelを再起動しなかった場合は、[参照]ダイアログの[参照]ボタンをクリックして、アドインファイルを見つける必要があります。これにより、[参照の追加]ウィンドウが開きます。タイプ:セクションのファイルを_Microsoft Excel Files(.xls; .xla)_に変更し、アドインが保存されているフォルダーを参照します。

アドインを選択し、[開く]をクリックします。これにより、アドインがリストに追加され、そこで選択して[OK]をクリックできます。

注:これらの手順の両方を実行する必要はありません!アドインのVBAプロジェクト名を変更した後にExcelを再起動したかどうかに応じて、どちらかを選択します。

これで、参照を設定したブック内の任意のモジュールでアドインの関数を使用できるようになり、Visual BasicEditorによって認識されます…​

_Project Explorer_を見ると、参照がブックに適用されていることがわかります…​

参照の追加は、この手順を実行したブックにのみ適用されることを覚えておくことが重要です。アドインの機能を使用するさまざまなブックごとにこれを行う必要があります。

ファイルの配布についてアドインへの参照を追加すると、アドインへのこのリンクはファイルに「ハードワイヤード」されます。ファイルを別のコンピューターに移動したり、同僚に配布したりすると、ブックは同じアドインを同じ場所のコンピューターで見つけることを期待します。また、アドインがコンピューターから移動または削除された場合、ブックはそれを見つけることができず、コードは機能しません。

一部の人々は、これが引き起こす可能性のある問題を回避するために、ファイルとそれに関連するアドインを常に同じフォルダーに配置する必要があると主張しています。もちろん、参照を再設定して問題を修正することもできます。

これらの要素を考慮に入れれば、問題は発生しません。