. NET Библиотечный класс в vba - многоуровневый доменный объект - PullRequest
0 голосов
/ 24 января 2020

Я использую. NET Библиотека классов в Excel VBA. Оно работает. Я могу скомпилировать и зарегистрировать его на RegAsm. Используя Intercaces in. Net и такие атрибуты COM, как ([InterfaceType (ComInterfaceType.InterfaceIsIDispatch)]), обычно я вижу методы и объекты в VBA Intelisence, и я могу использовать его

Но ... Я бы хотел использовать сложную многоуровневую объектную область. Получить его некоторым методом, и у меня есть проблема со списком дочерних объектов как свойство родительского объекта.

Мой метод в C#

    public object GetParentWithChildList()
    {
        var parent = new Parent
        {
            ParentName = "John",
            Children = new List<object>
            {
                new Child {ChildName = "Tom"},
                new Child {ChildName = "Brian"},
                new Child {ChildName = "Eva"}
            }.ToArray()
        };
        return parent;
    }

    public class Parent
    {
        public string ParentName { get; set; }
        public object[] Children { get; set; }
    }
    public class Child
    {
        public string ChildName { get; set; }
    }

объект [], я думаю, это Лучший способ вернуть список объектов для VBA / VB6 Это работает, когда у меня есть объект 1 уровня. например, я хотел бы вернуть только список объектов. object [] wokrs лучше, чем Child [] или List

А в VBA это работает только частично:

(основной объект вызывает LibDataAccess)

Sub GetParentWithChildListVbaTest()
Dim qda As LibDataAccess
Dim parent As parent

Set qda = New QgeDataAccess
Set parent = qda.GetParentWithChildList()

Debug.Print (parent.ParentName)   ' Works OK - it returns John

Dim child As child
Set child = parent.Children(0)     ' This line returns error: Wrong number of arguments or invalid property assignment
Debug.Print (parent.Children(0).ChildName)
End Sub

Мои вопросы: Как вернуть объект со списком подобъектов как свойство (подготовлено в. NET для VBA)? У меня неправильный код в C # или в VBA?

1 Ответ

0 голосов
/ 24 января 2020

Хорошо, у меня есть решение. Код в VBA имел ошибки не в C#

вместо этого:

Dim child As child
Set child = parent.Children(0)  
Debug.Print (parent.Children(0).ChildName)

должно быть примерно так:

Dim child As child
children = parent.Children 
Set child = children(0)
Debug.Print (child.ChildName)
...