我正在嘗試將一組對象作爲結果傳遞給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