gpt4 book ai didi

excel - VBA (Excel) 中的 .NET DLL

转载 作者:行者123 更新时间:2023-11-30 16:09:27 25 4
gpt4 key购买 nike

在过去的 2 天里,我一直在尝试获得一个在 VBA 中创建的基本 VB.NET dll。我已经阅读了关于这个视线的每一篇文章,但我总是遇到同样的错误。

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

我的类(class)

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 的引用。

目前一切正常

  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 component can't create object"

我已经使用 2 台计算机尝试过此操作:Win7 64 位、Excel 2010 64 位、VS 2010 和 Win7 64 位、Excel 2013、VS 2010 64 位,运气不错。我读过有人收到同样的错误,但我似乎没有任何效果。

有人看到我的方法有什么错误吗?

最佳答案

-为您的代码添加命名空间。
- 将函数设置为public
- 使其 com 可见并按照您提到的那样设置“注册 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 位、带有 SP2 的 Office 2010 专业版 32 位、带有框架 4 的 Visual Studio 2010。
-为 x64 配置项目:从 Visual Studio -> 转到构建菜单 -> 单击配置管理器 -> 在事件解决方案平台下,单击新建,然后添加一个 x64 作为平台。使用此平台为 x64 编译,link .
-最好对程序集进行签名(非常简单):项目属性>签名>对程序集进行签名>新建->输入文件名myKey.snk,不需要密码。
-构建你的项目。
- 如果您在运行 visual studio 的同一台机器上工作,则无需注册您的程序集,因为 VS 会注册,因为我们设置了“注册 COM 互操作”。
-对于没有运行VS的其他客户端机器,你必须注册你的程序集,只拿DLL文件,以管理员身份运行cmd,运行以下命令:

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

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

"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 中的其他步骤。

关于excel - VBA (Excel) 中的 .NET DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27587765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com