我尝试使用 C# ArrayList 返回一个 COM 对象列表(用 C# 开发)并在 VBA 中使用这个 COM 对象列表(Excel 2007,.NET 4)
我有 3 个从 Excel 调用的 C# 函数(VSTO 项目)
public ArrayList GetSimpleArray()
{
ArrayList arr = new ArrayList();
arr.Add(3);
arr.Add(2);
return arr;
}
public ArrayList GetComplexArray()
{
ArrayList arr = new ArrayList();
arr.Add(new Fund() { Id = "2" } );
arr.Add(new Fund() { Id = "3" });
return arr;
}
public IFund GetComplexObject()
{
return new Fund() { Id = "2" };
}
Fund 和 I Fund 定义:
[ComVisible(true)]
public interface IFund
{
string Id { get; set; }
string Name { get; set; }
}
[ComVisible(false)]
public sealed class Fund:IFund
{
public string Id { get; set; }
public string Name { get; set; }
public Fund()
{
}
public Fund(string id, string name)
{
this.Id = id;
this.Name = name;
}
}
在 Excel 中,我有:
Public Sub GetComObject()
Call InitVSTOAddIn ' Initialise automationObject
Dim complexObject
Set complexObject = automationObject.GetComplexObject()
Dim simpleArray
Set simpleArray = automationObject.GetSimpleArray()
Dim complexArray
Set complexArray = automationObject.GetComplexArray()
End Sub
complexObject 和 simpleArray 具有我正在寻找的值(complexObject 是具有 Id 和 Name 的对象,simpleArray 是具有 2 个元素“3”和“2”的 ArrayList)。
问题出在 complexArray 上。它是一个包含 2 个项目的 ArrayList,但每个项目都是“无变量”(见附图)
你知道为什么吗?
有没有办法在 C# 中返回 COM 对象列表并在 VBA 中使用它们?
做这样的事情是一种好习惯,还是有更好的方法在 VBA 中使用 C# 对象?
谢谢你的帮助