Excel 2010 64ビットは.NETオブジェクトを作成できません
-
02-10-2019 - |
質問
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アセンブリを呼び出す方法