2012-02-06 20 views
0

我在c#中創建了一個COM庫,我在Excel中使用VBA。 我的庫有一個屬性,它返回一個對象數組,但是當我嘗試訪問數組的元素時,我在VBA中得到這個編譯錯誤:「錯誤的參數數量或無效的屬性分配」。無法訪問從VBA中的.net代碼返回的對象數組

// C# property 
Foo[] FooArray { get { return _fooArray; } } 


' Client VBA code 
Dim obj as new Bar 
Dim f as Foo 
set f = obj.FooArray(0) 

我試着返回一個字符串數組,看到了同樣的錯誤。

回答

0
Dim f as Foo 
set f = obj.FooArray(0) 

這裏有四個錯誤。 FooArray是一個屬性,而不是函數。該物業不會有任何爭論。 設置不正確,該屬性返回一個數組,而不是一個對象。 f的類型是錯誤的,該屬性返回一個數組,而不是一個Foo。這應該是更接近:

Dim f As Foo() 
f = obj.FooArray 
0

我認爲問題來自VB與FooArray(0)語法的歧義。圓括號可以表示函數/子調用或數組索引器的參數。

解決方案是顯式聲明一個數組,例如, fa()如下:

Dim f As Foo 
Dim fa() As Foo 
Dim b As New Bar 

fa = b.FooArray 
Set f = fa(0)