VBA中的.NET DLL(Excel)

我花了最后2天试图获得一个基本的VB.NET DLL创build工作在VBA。 我已经读过这个景象的每一个post,但我一直得到同样的错误。

  1. 我创build了一个VB.NET类(我以pipe理员身份运行Visual Studio)。

我的课

Imports System Imports System.Collections.Generic Imports System.Text Imports System.Runtime.Interposervices Imports System.Linq Public Class TestClass Function TestMethod(ByVal input as String) Return "Hello" & input End Function End Class 
  1. 我设置了“使组件可见”
  2. 我设置了“注册COM互操作”
  3. 我build立并释放dll

  4. 我打开Excel并添加对dll的引用。

一切工作到目前为止

  1. 在工作表中添加下面的代码

     Public Sub test() Dim a As TestClass 'Note: Auto fills in once i start typing it in so i know that the DLL there Set a = New TestClass MsgBox (a.TestMethod("World") End Sub 

当我尝试运行代码时出现以下错误

“ActiveX组件不能创build对象”

我已经尝试使用2台电脑:Win7 64位,Excel 2010 64位,VS 2010和Win7 64位,Excel 2013,VS 2010 64位知道运气。 我已经阅读人们收到相同的错误,但我似乎没有任何工作。

有没有人在我的方法中看到任何错误?

– 为你的代码添加一个命名空间。
把这个function做成public
如上所述,使其可见并设置“注册COM互操作”。
你的代码应该是这样的:

 Namespace X Public Class TestClass Public Function TestMethod(ByVal input As String) Return "Hello" & input End Function End Class End Namespace 

– build立你的项目,你会在\ bin \ debug或\ bin \ release中findyourProjName.tlb文件。
打开Excel并添加一个引用yourProjName.tlb不是DLL。
修改你的代码是这样的:

 Sub test() Dim testObj As New TestClass Dim myStr As String myStr = testObj.TestMethod("ssssss") MsgBox myStr End Sub 

这对我有效。
编辑#1
– 我正在使用Windows 7 32位,Office 2010专业32位与SP2,Visual Studio 2010与框架4。
– 从Visual Studioconfiguration你的项目: – >进入生成菜单 – >点击configurationpipe理器 – >在活动解决scheme平台下,单击新build,然后添加一个以x64为平台。 使用此平台编译为x64, 链接 。
– 最好签署你的程序集(非常容易):项目属性>签名>签署程序集>新build – >input文件的名称作为myKey.snk,不需要密码。
– build立你的项目。
– 如果你在运行visual studio的同一台机器上工作,那么不需要注册你的程序集,因为我们设置了“注册COM互操作”,所以VS会这样做。
– 对于VS未运行的其他客户端机器,您必须注册您的程序集,只接受DLL文件,以pipe理员身份运行cmd,运行以下命令:

 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /codebase /tlb "D:\out\VB_DLL_001.dll" 

请注意,该命令将在同一个文件夹中为您生成* .tlb文件。
– 通过在cmd(以pipe理员身份运行)中运行以下命令将您的dll添加到全局程序集caching中:

 "c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe" /i "d:\out\VB_DLL_001.dll" 

从Excel添加对生成的tlb文件的引用:VBA编辑器 – >工具 – >引用 – >浏览 – >selecttlb文件 – >确定。 然后运行以前的代码,我希望它能成功运行。

编辑#2
基于评论,它通过构build用于x64架构的DLL来工作,所以,在编辑#1中不需要其他步骤。