我正在尝试将一组对象作为结果传递给VBA,但Excel正在抱怨以下内容:如何通过COM将VB .NET数组哈希传递给VBA?
'将函数或接口标记为受限,或者该函数使用Visual Basic中不支持的自动化类型'。
我在网上看了一圈,发现了类似的问题,但没有看到我正在尝试做的一个。
我的函数声明如下:
<ComClass(Class1.ClassId, Class1.InterfaceId, Class1.EventsId)> _
Public Class Class1
#Region "COM GUIDs"
...
#End Region
Public Sub New()
MyBase.New()
End Sub
Private Const AT_HOME As Boolean = True
Public Function hello() As System.String()
Dim a(10) As String
a(0) = "hello"
a(1) = "Goodbye"
Return a
End Function
Public Function CallArray(ByVal serviceName As String, _
ByVal effectiveDate As String,
ByVal serviceParams() As System.Object,
ByRef ArrayRes() As System.Object) As System.Boolean
VBA的抱怨System.Objects我的问题是,到底是如何你应该通过和.NET返回数组VBA。 ArrayRes()中的数据也是混合类型,它不仅仅是字符串等,它可以包含字符串,整数等数组。可能更容易映射到VBA。最后一件事情,如果VB.NET中的System.Object和Arrays不是这样,也许这是另一种方式,通过集合或列表,然后我打开它。我只需要将这些数据导入到VBA中。如果需要的话,我也可以转向C#。
感谢任何帮助或建议
我怀疑真正的问题是在你的方式公开这个功能。它实际上是''接口声明的一部分,并且使用'属性?发布更多代码。 –
增加了更多的代码 – Jamie
这是一个真正的COM类,在VB.NET下的Visual Studio中,hello的公共功能工作得很好。所以我不认为它是由于我没有正确地暴露功能。它们可以被调用,但是这是将数据类型从VBA传递到VB .NET的一个问题,它们在较低级别上是不同的。 所以我需要的是可以传递哪些对象数据类型或如何做到这一点。我原以为微软会公布一些关于这个方面的知识,因为这是他们的产品,并且能够传递数组类型和哈希等是非常标准的东西。 – Jamie