无法在VBA中使用我的简单VB类库



所以这是我在这个伟大社区的第一篇文章,我是一个绝对的初学者,我相信我会从这里得到很好的建议。

我疯了这个简单的VB类库在Visual Studio 2017

Public Class Addition
Public Function Add(No1 As Long, No2 As Long) As Long
Return No1 + No2
End Function
End Class

我使其COM可见,并选中了"注册COM互操作"。并构建项目。

在我的access VBA项目中,我添加了对Dll的引用,没有出现任何问题,并将以下代码放在按钮的单击事件后面。

Private Sub Command0_Click()
Dim myCalc As ShwDolphin.Addition
Set myCalc = New ShwDolphin.Addition
Dim Num As Long
Num = myCalc.Add(2, 5)
Debug.Print Num
End Sub

"ShwDolphin"是VB程序集名称。

但我总是收到这个错误消息"运行时错误429 Active X组件无法创建对象">

你能告诉我我在这里做错了什么吗?这简直把我逼疯了。

非常感谢。

阅读评论,我猜你在我所说的"bitness"方面有所不同。Visual Studio中的默认项目通常为32位。如果构建32位COM DLL,则只能由32位进程加载。如果您的Office安装是64位的,它将永远无法工作。您需要做的是为64位构建/注册它。

现在,如果你为MSIL而不是任何特定的处理器(x86或x64(构建,你就不必真正为64位重建。所需要的只是注册64位。(默认的构建配置是MSIL。(

因此,您需要在C:\windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe 中使用64位regasm

将该regasm与/tlb/codebase"thenameofour.dll"选项一起使用

如果你构建了x64,Office是32位的,那么就反其道而行之:使用32位regasm,但很可能你使用的是32位默认值。

你也可以看看这个答案:activex可以';不能通过vbs创建对象,但可以通过经典的asp 创建对象

因此,在经历了很多挫折之后,我能够通过以下操作使其发挥作用:

1-用相同的代码创建一个新项目(这比删除以前的dll更容易(。

2-禁用Visual Studio项目属性中的"注册COM互操作"选项。

3-建设项目。

4-使用C:\windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe中的64位regasm来注册我的程序集。

5-在VBA编辑器中添加对生成的tlb文件的引用。

感谢大家的慷慨帮助,感谢这个社区。我不知道为什么我必须这样做,但我使用64位窗口和64位办公室。就像@dee所说的添加接口是不必要的,它只是起作用。

若要在VBA中使用自定义.NET类,*.dll必须向COM自动化公开方法(和属性(。这对你意味着什么?你必须创建一个接口。

Public Interface IAddition
Function Add(No1 As Long, No2 As Long) As Long
End Interface
Public Class Addition
Implements IAddition
Public Function Add(No1 As Long, No2 As Long) As Long Implements IAddition.Add
Return No1 + No2
End Function
End Class

用法:

Private Sub Command0_Click()
Dim myCalc As ShwDolphin.IAddition
Set myCalc = New ShwDolphin.Addition
Dim Num As Long
Num = myCalc.Add(2, 5)
Debug.Print Num
End Sub

要了解更多详细信息,请按照我过去的回答中提供的说明:Generics和Com-Visible.NET库

您可能也对这篇文章感兴趣:使用C#、VB.NET或C++/CLI 扩展VBA代码

祝你好运!

相关内容

  • 没有找到相关文章

最新更新