質問

Excelで使用するシンプルなクラスライブラリがあります。これが私のクラスの単純化です...

using System;
using System.Runtime.InteropServices;

namespace SimpleLibrary
{
 [ComVisible(true)]
 public interface ISixGenerator
 {
  int Six();
 }

 public class SixGenerator : ISixGenerator
 {
  public int Six() 
  {
   return 6; 
  }
 }
}

Excel 2007では、マクロ対応のワークブックを作成し、次のコードでモジュールを追加します。

Public Function GetSix()
    Dim lib As SimpleLibrary.SixGenerator
    lib = New SimpleLibrary.SixGenerator
    Six = lib.Six
End Function

その後、Excelで関数getsix()を呼び出すことができ、6つを返します。これは、Excel 2010 64bitで機能しなくなりました。実行時エラー「429」が表示されます。ActiveXコンポーネントはオブジェクトを作成できません。

CPUの代わりにプラットフォームターゲットをX64に変更しようとしましたが、COM Interopオプションのレジスタをオフにしない限り、コードはコンパイルされません。 。

Excel 2010 64ビットでライブラリを使用する方法はありますか?

役に立ちましたか?

解決

.NETアセンブリをどのように作成したかを詳細に説明していません。ただし、アセンブリをcomに公開するために必要な一定の手順があります。

  • 次の属性をコードに追加します。

    using System;
    using System.Runtime.InteropServices;
    
    namespace SimpleLibrary
    {
        [ComVisible(true)]
        [Guid("71F645D0-AA78-4447-BA26-3A2443FDA691")]
        public interface ISixGenerator
        {
            int Six();
        }
    
        [ComVisible(true)]
        [ProgId("SimpleLibrary.SixGenerator")]
        [Guid("8D59E0F6-4AE3-4A6C-A4D9-DFE06EC5A514")]
        [ClassInterface(ClassInterfaceType.AutoDispatch)]
        public class SixGenerator : ISixGenerator
        {
            [DispId(1)]
            public int Six()
            {
                return 6;
            }
        }
    }        
    
  • アセンブリに署名する必要があります(プロジェクト - >プロパティ... - >署名, 、強力なキーファイルを作成し、ボックスをチェックしてアセンブリに署名します

  • アセンブリを登録するには、次のコマンドが必要です(すべて1行で)。

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe 
                      SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
    

    これにより、VBAプロジェクトから参照する必要がある.tlbタイプライブラリファイルが作成されます。ツール - >参照 - >閲覧... VBAエディターで)

  • VBAコードを調整します:

    Public Function GetSix()
        Dim lib As SimpleLibrary.SixGenerator
        Set lib = New SimpleLibrary.SixGenerator
        GetSix = lib.Six
    End Function
    

Microsoftのサポートデータベースに関するこの記事の詳細については、詳細に説明します。

Visual Basic 6.0からVisualBasic .NETまたはVisual Basic 2005アセンブリを呼び出す方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top