【发布时间】:2017-08-01 13:45:29
【问题描述】:
我的 C# 库 (.net 4.5.2) 代码如下所示:
namespace HelloWorld
{
public class Hello
{
public string HelloUser(string name)
{
return "Hello, " + name;
}
}
}
我已使用以下代码使程序集 COM 在 AssemblyInfo.cs 文件中可见:
[assembly: ComVisible(true)]
我通过 Tools ->References 在 VBA 代码中添加了对 dll 的引用,当尝试在 excel vba 中使用它时,我收到运行时错误:429(ActiveX 组件无法创建对象)。我的代码/调用有什么问题:
Excel VBA (2013)
Option Explicit
Sub tester()
Dim message As String
Dim User As String
User = "Ronnie"
Dim obj As New HelloWorld.Hello
message = obj.HelloUser(User)
End Sub
更新 通过 Toos ->References 添加引用并使用 F2 检查状态后
更新 #3 更新了 VBA 代码,仍然没有成功。这次的错误是:
Run-time error: 429 (ActiveX component can't create object)
【问题讨论】:
-
从您的 VBA 项目中引用类型库 (.tlb),像使用 VBA 中的任何其他类型库一样使用它。不过,不确定
static对 COM 的友好程度如何,您可能想用适当的属性装饰Hello类。 -
@Mat'sMug 我为我的 dll 简化了代码,使其成为非静态的。我怀疑我没有在 VBA 中正确声明该函数。这是在类(Hello)和命名空间(HelloWorld)中声明函数的正确方法吗?
-
你没有
Declare它,你去Tools > References... 然后浏览找到你添加为引用的类型库。然后按 F2 进入 VBE 的对象浏览器,查看是否加载了HelloWorld库,以及它是否包含带有HelloUser函数的Hello类。如果没有,你就有问题了。如果是这样,那么您在 VBA 中使用它就像任何其他引用的类型库一样。 -
@Mat'sMug 我使用建议的方法添加了它,现在我看到了 dll 和类,但在类下面什么都没有(你好)。