如何在VBA中使用托管DLL中的函数?

时间:2011-12-19 20:24:45

标签: c# vba dll com-interop

我希望在VBA中使用一个简单的C#函数。为了这个问题,我们可以说C#中的例程如下所示:

using System;
namespace MyTestLibrary
{
    public static class Class1
    {
        static string Shout(string message)
        {
            return message + "!";
        }
    }
}

我希望能够像这样在VBA端使用它。这会导致错误(“无法找到DLL入口点”Shout“):

Public Declare Function Yell Lib "C:\blah\MyTestLibrary.dll" Alias "Shout" (phrase As String) As String

Sub test()
    MsgBox Yell("Hello World")
End Sub

进一步的研究显示了一种解决方法(我已经实现了这个实现):

Sub test()
    Dim y As MyTestLibrary.Class1
    Set y = New MyTestLibrary.Class1
    MsgBox y.Shout("Hello World")
End Sub

但是,这不符合我的要求,因为我无法在我的工作簿中部署我的库,因为我必须手动添加引用。对于个人使用来说并不是什么大问题,但是当你必须将它部署到非技术导向的最终用户时会很头疼,因为必须手动引用每个dll。

TLDR 如何在VBA中使用C#创建的静态函数?

2 个答案:

答案 0 :(得分:3)

我认为这是不可能的。您需要使用等效的非静态函数在C#或VB.Net中创建COM包装器,并从VBA程序中调用它。

答案 1 :(得分:0)

查看Forms Interop项目,也许你可以搞清楚。如果您可以从VB6 / VBA调用表单,则可以调用函数。

link:http://www.codeproject.com/KB/dotnet/VB6_-_C__Interop_Form.aspx