无法访问VBA中从.net代码返回的对象数组

时间:2012-02-06 11:01:27

标签: .net com

我在c#中创建了一个COM库,我正在使用Excel中的VBA。 我的库有一个返回一个对象数组的属性但是当我尝试访问数组的元素时,我在VBA中得到了这个编译错误:“错误的参数数量或无效的属性赋值”。

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


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

我尝试返回一个字符串数组并看到同样的错误。

2 个答案:

答案 0 :(得分:0)

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

这里有四个错误。 FooArray是一个属性,而不是一个函数。该物业不会参与争议。 Set 不正确,该属性返回一个数组,而不是一个对象。 f的类型错误,属性返回一个数组,而不是一个Foo。这应该更接近:

Dim f As Foo()
f = obj.FooArray

答案 1 :(得分:0)

我认为问题来自VB中使用FooArray(0)语法的歧义。括号可以表示Function / Sub调用或数组索引器的参数。

解决方案是明确声明一个数组,例如fa()如下:

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

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