繁体   English   中英

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

[英]Not able to use my simple VB class library in VBA

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

我在Visual Studio 2017中使用这个简单的VB类库

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

我让它可见COM并检查注册COM互操作。 并构建项目。

在我的访问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组件无法创建对象”

你能告诉我这里我做错了什么吗? 这真让我抓狂。

非常感谢你。

阅读评论,我的猜测是,你所谓的“位数”有所不同。 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

使用带有/ tlb / codebase“thenameofyour.dll”选项的regasm

如果您构建了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位Windows和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代码

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM