C# ArrayList を使用して COM オブジェクト (C# で開発) のリストを返し、この COM オブジェクトのリストを VBA (Excel 2007、.NET 4) で使用しようとしています。
Excel (VSTO プロジェクト) から呼び出す 3 つの C# 関数があります。
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 と IFund が定義されている場合:
[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# オブジェクトを使用するためのより良い方法はありますか?
ご協力いただきありがとうございます