VBA中的.NET DLL(Excel)

时间:2014-12-21 08:17:36

标签: c# vb.net excel vba excel-vba

我花了最近两天的时间试图获得一个基本的VB.NET dll,它可以在VBA中运行。我已经看过这个视线上的每一个帖子,但我一直得到同样的错误。

  1. 我创建了一个VB.NET类(我以管理员身份运行Visual Studio')
  2. 我的班级

    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. 我构建并发布了dll

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

    5. 到目前为止,一切都很有效

      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
        
      2. 当我尝试运行代码时,我收到以下错误

          

        " ActiveX组件无法创建对象"

        我尝试使用2台计算机:Win7 64位,Excel 2010 64位,VS 2010和Win7 64位,Excel 2013,VS 2010 64位,运气良好。我看过人们收到同样的错误,但似乎没什么用。

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

1 个答案:

答案 0 :(得分:3)

- 为您的代码添加命名空间 - 将函数设为public
- 使其可见并设置'注册COM互操作'如你所说。
你的代码应该是:

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

- 构建项目,您将在\ bin \ debug或\ bin \ release中找到yourProjName.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 - 为您的项目配置x64:从Visual Studio - >转到构建菜单 - >单击配置管理器 - >在Active solution platform下,单击New,然后添加一个x64作为平台。使用此平台编译x64,link
- 首选签名程序集(非常简单):项目属性>签名>签署组件>新 - >输入文件名称为myKey.snk,无需密码 - 建立你的项目。
- 如果你在运行visual studio的同一台机器上工作,那么就不需要注册你的程序集了,因为我们设置'注册COM互操作'。 - 对于VS未运行的其他客户机,必须注册程序集,仅获取DLL文件,以管理员身份运行cmd,运行以下命令:

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

请注意,此命令将在同一文件夹中为您生成* .tlb文件。
- 通过在cmd(以管理员身份运行)中运行以下命令,将您的dll添加到Global Assembly缓存中:

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

- 从Excel添加对生成的tlb文件的引用:VBA编辑器 - >工具 - >参考文献 - >浏览 - >选择tlb文件 - >好 。然后运行前面的代码,我希望它能成功运行。

编辑#2
根据评论,它的工作原理是为 x64 架构构建DLL,因此,不需要编辑#1中的其他步骤。