【发布时间】:2012-05-15 08:55:18
【问题描述】:
我目前正在尝试将对象数组作为结果传递给 VBA,但 Excel 抱怨以下内容:
'函数或接口标记为受限,或函数使用 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() 中的数据也是混合类型的,它不仅仅是字符串等,它是一个数组数组,可以包含字符串、整数双精度等。
我选择了 VB .NET,因为我认为映射到 VBA 会更容易。
最后一件事,如果 VB .NET 中的 System.Object 和 Arrays 不是这种方式,即也许通过集合或列表有另一种方式,那么我对此持开放态度。我只需要将这些数据导入 VBA。如果需要,我也可以转到 C#。
感谢任何帮助或建议
【问题讨论】:
-
我怀疑真正的问题在于您公开此功能的方式。它实际上是
<ComVisible(true)>并使用` 属性的接口声明的一部分吗?发布更多代码。 -
它是VB .NET下Visual Studio中真正的COM类,hello的公共函数运行良好。所以我不认为这是因为我没有正确地暴露这些功能。可以调用它们,但这是将数据类型从 VBA 传递到 VB .NET 的问题,并且它们在较低级别有所不同。所以我需要的是可以在哪些对象数据类型之间传递或者如何做到这一点。我原以为微软会在这方面发布一些内容,因为这是他们的产品,并且能够传递数组和哈希等数据类型是非常标准的东西。
-
a(1) = “再见”。将其发布在您的问题中。
-
我在原始帖子中添加了更多代码,显示接口类型属性等。