2012-02-06 91 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)