无法在Excel VBA中调用通过COM公开的c#库

本文关键字:COM Excel VBA 调用 | 更新日期: 2023-09-27 18:14:52

我试图创建一个非常基本的c#库,并通过COM接口暴露它,以便我可以从VBA访问它,但在运行时它抛出一个错误"类不支持自动化或不支持预期的接口"

我已经阅读了所有的在线教程,并完全按照规定做了,所以我很困惑为什么会这样。我的基本类是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace PDCCOMTest
{
    [ComVisible(true)]
    public interface IPDCCOMTest
    {
        string SubmitRequest(string requestXML);
    }
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(IPDCCOMTest))]
    [ProgId("PDCCOMTest.PDCCOMTest")]
    public class PDCCOMTest : IPDCCOMTest
    {
        public string SubmitRequest(string requestXML)
        {
            return "hello world";
        }
    }
}

在项目设置中,我已经转到应用程序->汇编信息->使汇编COM可见(设置为ON)和构建->注册COM互操作(设置为ON)

我编译并构建解决方案,然后加载Excel并设置一个基本的按钮宏表。在这里,我转到References,在COM对象列表下,我的新c# COM程序集出现了,我检查了它。然后,我能够发现智能感知的类型,并且可以从智能感知中获得SubmitRequest方法,因此它可以很好地拾取所有这些类型。VBA代码如下

Private Sub CommandButton1_Click()
    Dim oObj As New PDCCOMTest.PDCCOMTest
    Dim text As String
    test = oObj.SubmitRequest("test")
End Sub

当我运行工作表并单击按钮时,它会在上面Sub的最后一行抛出错误,即SubmitRequest()行

"错误430:类不支持自动化或不支持期望的接口"

谁能告诉我我忽略了什么,为什么会发生这种情况?

谢谢,詹姆斯。

无法在Excel VBA中调用通过COM公开的c#库

这在我的机器上工作,所以你的代码可能很好。如果让我大胆猜测,我会说这看起来像是一个。net加载问题,即Excel加载了一些其他。net插件并加载了CLR v1或诸如此类的。

看看这个SO的答案,希望对你有所帮助。