在Excel VBA中使用C#库函数

时间:2017-03-11 04:56:43

标签: c# excel vba excel-vba

我的C#库(.net 4.5.2)代码如下所示:

namespace HelloWorld
{
    public class Hello
    {
        public string HelloUser(string name)
        {
            return "Hello, " + name;
        }
    }
}

我使用以下代码在AssemblyInfo.cs文件中显示了程序集COM:

[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添加参考 - >参考并使用F2检查状态 enter image description here

更新#3 更新了VBA代码但仍然没有成功。这次错误是:

Run-time error: 429 (ActiveX component can't create object)

1 个答案:

答案 0 :(得分:3)

您的类没有公开COM的接口。您需要使用[Guid("some guid")]属性装饰您的类,如果您希望能够将其与后期绑定一起使用,则为其提供[ProgId("Some.Id")],并正式描述成员公开方式的[ComDefaultInterface(typeof(IHelloWorld))]

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IHelloWorld
{ 
    string HelloUser(string name);
}

[ComVisible(true)]
[ComDefaultInterface(typeof(IHelloWorld))]
public class HelloWorld : IHelloWorld
{
    public string HelloUser(string name)
    {
        return $"Hello, {name}.";
    }
}