Как добавить в коллекцию элемент пользовательского типа - VBA?
У меня стоит задача описать свой тип данных и создать коллекцию такого типа. При попытке добавить в качестве нового элемента коллекции элемент моего типа, компилятор выбрасывает ошибку.
Для примера приведу упрощенный код:
Public Type Status
name As String
End Type
Sub asdf()
Dim statuses As New Collection
Dim stas As Status
stas.name = "STAS"
statuses.Add stas 'Место ошибки
End Sub
ошибка:
Compile error: Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions.
Суть в общем-то понимаю. Знаю одно из решений проблемы - использовать class module. К сожалению, такое решение по условию задачи не подходит, так как необходимо описать все новые типы в одном модуле. Такая же ошибка выбрасывается, когда пытаюсь присвоить элемент своего типа переменной типа Variant. В общем, я в тупике.
Ответы (1 шт):
Как я понял, в старых версиях ms office vba отсутствовала возможность помещения пользовательского типа в оболочку Variant. Кажется, что collection использует variant как тип переменной для хранения информационной части списка. Моим решением этой проблемы стало использование массивов данных вместо коллекций. В последних версиях ms office (новее 2016, как минимум), по словам разработчиков, такой проблемы возникнуть не должно. Жаль, что vba так долго к этому шел.