Excel 2010 64位无法创建.net对象

我有一个简单的类库,我在Excel中使用。 这是我class级的简化……

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(),它将返回六。 这不再适用于Excel 2010 64位。 我得到运行时错误’429’:ActiveX组件无法创建对象。

我尝试将平台目标更改为x64而不是任何CPU但是我的代码将无法编译,除非我取消选中Register for COM interop选项,这样做使得我的宏启用工作簿无法看到SimpleLibrary.dll,因为它不再是regsitered 。

任何想法如何使用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; } } } 
  • 必须对您的程序集进行签名( 项目 – >属性… – >签名 ,创建一个强密钥文件并选中框以对程序集进行签名

  • 注册程序集需要以下命令(全部在一行中):

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

    这将创建一个.tlb类型的库文件,您必须从VBA项目中引用该文件( 工具 – >引用 – >在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中调用Visual Basic .NET或Visual Basic 2005程序集