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程序集