方法 : Visual Basic プロジェクトのコードを VBA に公開する
2 種類のコードを連携させる場合は、Visual Basic プロジェクトのコードを Visual Basic for Applications (VBA) コードに公開することができます。
対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
Visual Basic プロセスは Visual C# プロセスとは異なります。詳細については、「方法 : Visual C# プロジェクトのコードを VBA に公開する」を参照してください。
ホスト項目クラスにあるコードに対するプロセスと、その他のクラスにあるコードに対するプロセスは異なります。
ホスト項目クラスにあるコードを公開する
ホスト項目クラスにはないコードを公開する
関連のビデオ デモについては、「How Do I: Call VSTO Code from VBA? (操作方法: VBA から VSTO コードを呼び出す)」を参照してください。
ホスト項目クラスにあるコードを公開する
ホスト項目クラスにある Visual Basic コードを VBA コードで呼び出すことができるようにするには、ホスト項目の EnableVbaCallers プロパティを True に設定します。
ホスト項目クラスのメソッドを公開し、VBA から呼び出す方法を説明するチュートリアルについては、「チュートリアル : VBA から Visual Basic プロジェクトのコードを呼び出す」を参照してください。ホスト項目の詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
ホスト項目クラスにあるコードを VBA に公開するには
マクロをサポートする Word 文書、Excel ブック、または Excel テンプレートに基づく、VBA コードが既に含まれているドキュメント レベルの Visual Basic プロジェクトを開くか、または作成します。
マクロをサポートするドキュメント ファイル形式の詳細については、「VBA とドキュメント レベルのカスタマイズの結合」を参照してください。
[!メモ]
この機能は、Word テンプレート プロジェクトでは使用できません。
ドキュメント内の VBA コードがユーザーにマクロの有効化を要求することなく実行可能であることを確認します。Word または Excel のセキュリティ センターの設定にある信頼できる場所の一覧に Office プロジェクトの場所を追加することで、VBA コードを信頼して実行できるようになります。
VBA に公開するプロパティ、メソッド、またはイベントを、プロジェクト内のいずれかのホスト項目クラスに追加し、新しいメンバーを Public として宣言します。クラスの名前は、アプリケーションによって異なります。
Word プロジェクトの場合、ホスト項目クラスの名前は既定で ThisDocument になります。
Excel プロジェクトの場合、ホスト項目クラスの名前は既定で ThisWorkbook、Sheet1、Sheet2、および Sheet3 になります。
ホスト項目の EnableVbaCallers プロパティを True に設定します。このプロパティは、ホスト項目をデザイナーで開いたときに [プロパティ] ウィンドウで利用できます。
このプロパティを設定すると、Visual Studio によって自動的に ReferenceAssemblyFromVbaProject プロパティが True に設定されます。
[!メモ]
ブックまたは文書に VBA コードが含まれていない場合、またはドキュメント内の VBA コードに実行に対する信頼が付与されていない場合に、EnableVbaCallers プロパティを True に設定するとエラー メッセージが表示されます。これは、このような場合、Visual Studio が文書内の VBA プロジェクトを変更できないからです。
表示されたメッセージで [OK] をクリックします。このメッセージは、プロジェクトを Visual Studio から実行するときに VBA コードをブックまたは文書に追加した場合、次にプロジェクトをビルドするときにその VBA コードが失われることを示します。これは、プロジェクトをビルドするたびに、ビルド出力フォルダー内のブックまたは文書が上書きされるからです。
この時点で、Visual Studio によって、VBA プロジェクトがアセンブリを呼び出すことができるようにプロジェクトが構成されます。さらに、Visual Studio は CallVSTOAssembly という名前のプロパティを VBA プロジェクトの ThisDocument、ThisWorkbook、Sheet1、Sheet2、または Sheet3 モジュールに追加します。このプロパティを使用して、VBA に公開したクラスのパブリック メンバーにアクセスできます。
プロジェクトをビルドします。
ホスト項目クラスにはないコードを公開する
ホスト項目クラスにはない Visual Basic コードを VBA コードで呼び出すことができるようにするには、コードを変更して VBA から参照できるようにします。
ホスト項目クラスにはないコードを VBA に公開するには
マクロをサポートする Word 文書、Excel ブック、または Excel テンプレートに基づく、VBA コードが既に含まれているドキュメント レベルの Visual Basic プロジェクトを開くか、または作成します。
マクロをサポートするドキュメント ファイル形式の詳細については、「VBA とドキュメント レベルのカスタマイズの結合」を参照してください。
[!メモ]
この機能は、Word テンプレート プロジェクトでは使用できません。
ドキュメント内の VBA コードがユーザーにマクロの有効化を要求することなく実行可能であることを確認します。Word または Excel のセキュリティ センターの設定にある信頼できる場所の一覧に Office プロジェクトの場所を追加することで、VBA コードを信頼して実行できるようになります。
VBA に公開するメンバーをプロジェクトのパブリック クラスに追加し、そのメンバーを public として宣言します。
VBA に公開するクラスに次の ComVisibleAttribute 属性および ComClassAttribute 属性を適用します。これらの属性によって、クラスが VBA から参照できるようになります。
<Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
プロジェクト内のホスト項目クラスの GetAutomationObject メソッドをオーバーライドして、VBA に公開するクラスのインスタンスを返します。次のコード例では、DocumentUtilities という名前のクラスを VBA に公開することを前提としています。
Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
文書 (Word の場合) またはワークシート (Excel の場合) を Visual Studio 内のデザイナーで開きます。
[プロパティ] ウィンドウで ReferenceAssemblyFromVbaProject プロパティを選択し、値を True に変更します。
[!メモ]
ブックまたは文書に VBA コードが含まれていない場合、または文書内の VBA コードに実行に対する信頼が付与されていない場合に、ReferenceAssemblyFromVbaProject プロパティを選択し、値を True に設定するとエラー メッセージが表示されます。これは、このような場合、Visual Studio が文書内の VBA プロジェクトを変更できないからです。
表示されたメッセージで [OK] をクリックします。このメッセージは、プロジェクトを Visual Studio から実行するときに VBA コードをブックまたは文書に追加した場合、次にプロジェクトをビルドするときにその VBA コードが失われることを示します。これは、プロジェクトをビルドするたびに、ビルド出力フォルダー内のブックまたは文書が上書きされるからです。
この時点で、Visual Studio によって、VBA プロジェクトがアセンブリを呼び出すことができるようにプロジェクトが構成されます。さらに、Visual Studio は GetManagedClass という名前のメソッドを VBA プロジェクトに追加します。このメソッドは VBA プロジェクト内のどこからでも呼び出すことができ、それによって VBA に公開したクラスにアクセスできます。
プロジェクトをビルドします。
参照
処理手順
方法: Visual Studio で Office プロジェクトを作成する
チュートリアル : VBA から Visual Basic プロジェクトのコードを呼び出す
方法 : Visual C# プロジェクトのコードを VBA に公開する