次の方法で共有


方法 : Visual C# プロジェクトのコードを VBA に公開する

更新 : 2007 年 11 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • ドキュメント レベルのプロジェクト

Microsoft Office のバージョン

  • 2007 Microsoft Office system

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

2 種類のコードを連携させる場合は、Visual C# プロジェクトのコードを Visual Basic for Applications (VBA) コードに公開することができます。

Visual C# プロセスは Visual Basic プロセスとは異なります。詳細については、「VBA からドキュメント レベルのカスタマイズ内のコードを呼び出す」および「方法 : Visual Basic プロジェクトのコードを VBA に公開する」を参照してください。

Visual C# プロジェクトのコードの公開

VBA コードから Visual C# プロジェクトのコードを呼び出すには、VBA コードを変更して COM から参照できるようにし、デザイナで ReferenceAssemblyFromVbaProject プロパティを True に設定します。

VBA から Visual C# プロジェクト内のメソッドを呼び出す方法について説明したチュートリアルについては、「チュートリアル : VBA から Visual C# プロジェクトのコードを呼び出す」を参照してください。

Visual C# プロジェクトのコードを VBA に公開するには

  1. マクロをサポートする Word 文書、Excel ブック、または Excel テンプレートに基づく、VBA コードが既に含まれているドキュメント レベルのプロジェクトを開くか、または作成します。

    マクロをサポートするドキュメント ファイル形式の詳細については、「VBA からドキュメント レベルのカスタマイズ内のコードを呼び出す」を参照してください。

    Bb608604.alert_note(ja-jp,VS.90).gifメモ :

    この機能は、Word テンプレート プロジェクトでは使用できません。

  2. ドキュメント内の VBA コードがユーザーにマクロの有効化を要求することなく実行可能であることを確認します。VBA コードを信頼して実行するには、Word または Excel のセキュリティ センターの設定にある信頼できる場所の一覧に、Visual Studio Tools for Office プロジェクトの場所を追加します。

  3. VBA に公開するメンバをプロジェクトのパブリック クラスに追加し、そのメンバを public として宣言します。

  4. VBA に公開するクラスに次の ComVisibleAttribute 属性および ClassInterfaceAttribute 属性を適用します。これらの属性によって、クラス インターフェイスを生成しなくても VBA に公開するクラスが COM から参照できるようになります。

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. プロジェクトのホスト項目クラスの GetAutomationObject メソッドをオーバーライドして、VBA に公開するクラスのインスタンスを返します。

    • VBA にホスト項目クラスを公開する場合は、このクラスに属する GetAutomationObject メソッドをオーバーライドし、このクラスの現在のインスタンスを返します。

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • VBA にホスト項目ではないクラスを公開する場合は、プロジェクト内のいずれかのホスト項目に属する GetAutomationObject メソッドをオーバーライドし、ホスト項目ではないクラスのインスタンスを返します。たとえば、次のコードでは、DocumentUtilities という名前のクラスを VBA に公開することを前提としています。

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    ホスト項目の詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。

  6. VBA に公開するクラスからインターフェイスを抽出します。[インターフェイスの公開] ダイアログ ボックスで、インターフェイス宣言に含めるパブリック メンバを選択します。詳細については、「方法 : [インターフェイスの展開] でコードをリファクタリングする」を参照してください。

  7. インターフェイス宣言に public キーワードを追加します。

  8. インターフェイスに ComVisibleAttribute 属性を追加して、インターフェイスを COM から参照できるようにします。

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. 文書 (Word の場合) またはワークシート (Excel の場合) を Visual Studio 内のデザイナで開きます。

  10. [プロパティ] ウィンドウで [ReferenceAssemblyFromVbaProject] プロパティを選択し、値を True に変更します。

    Bb608604.alert_note(ja-jp,VS.90).gifメモ :

    ブックまたは文書に VBA コードが含まれていない場合、または文書内の VBA コードに実行に対する信頼が付与されていない場合は、[ReferenceAssemblyFromVbaProject] プロパティを選択し、値を True に設定するときにエラー メッセージが表示されます。このエラーは、この状況では、Visual Studio Tools for Office がドキュメント内の VBA プロジェクトを変更できないために発生します。

  11. 表示されたメッセージで [OK] をクリックします。このメッセージは、プロジェクトを Visual Studio から実行するときに VBA コードをブックまたは文書に追加した場合、次にプロジェクトをビルドするときにその VBA コードが失われることを示します。これは、プロジェクトをビルドするたびに、ビルド出力フォルダ内のブックまたは文書が上書きされるためです。

    この時点で、Visual Studio Tools for Office によって VBA プロジェクトがアセンブリを呼び出すことができるようにプロジェクトが構成されます。さらに、Visual Studio Tools for Office は GetManagedClass メソッドを VBA に追加します。このメソッドは VBA プロジェクト内のどこからでも呼び出すことができ、それによって VBA に公開したクラスにアクセスできます。詳細については、「VBA からドキュメント レベルのカスタマイズ内のコードを呼び出す」を参照してください。

  12. プロジェクトをビルドします。

参照

処理手順

方法 : Visual Studio Tools for Office プロジェクトを作成する

チュートリアル : VBA から Visual C# プロジェクトのコードを呼び出す

方法 : Visual Basic プロジェクトのコードを VBA に公開する

概念

Visual Studio における Office ソリューションの作成

VBA とドキュメント レベルのカスタマイズの結合

VBA からドキュメント レベルのカスタマイズ内のコードを呼び出す