2017-01-02 7 views
2

Каждый раз, когда я пытаюсь передать UDT другим функциям, я получаю эту ошибку компиляции: «Только пользовательские типы, определенные в публичных объектных модулях, могут быть принудительно применены к варианту или из варианта или переданы в функции с поздними ограничениями».Как я могу работать с определенными пользователем типами?

Единственная внутренняя функция, которую я тестировал, которая работает с UDT в качестве аргумента, - VarPtr. Я даже не могу использовать TypeName или VarType.

Есть ли способ передать UDT как аргументы, явно не ожидающие определенного типа? Вид вроде Variant, но для UDT.

Я также хотел бы хранить UDT в массивах/словарях/коллекциях, но это также кажется проблематичным. UDT звучат идеально для моих нужд (не имея отдельного модуля класса), но кажется, что они очень строго типизированы (если это правильный термин для него).

EDIT: Похоже, что VarPtr ожидает аргумент как «Any», поэтому, возможно, это тот тип, который принимает варианты и UDT. Проблема в том, что VBA IDE, встроенная в Excel, не позволяет мне использовать этот тип.

+0

* Не имея иметь отдельный модуль класса *. Вы не прочитали сообщение об ошибке? –

+0

Все это уже в модуле, а не в модуле класса. Я хочу определить все в одном модуле, а не несколько. –

+1

Наложив это ограничение на себя, вы открываете себя в мир боли –

ответ

0

Таким образом, вы можете использовать только UDT в пределах модуля, который они объявили, поэтому, скорее всего, вы указали свой UDT в одном модуле, и ошибка возникает, когда функция в другом модуле пытается использовать ваш UDT ...

Я думаю, основываясь на вашем вопросе, вы ищете пользовательские классы, похожие на UDT, но они могут использоваться во всем вашем проекте и даже передаваться в качестве параметров к и от таких функций, как вы ищите.

Надежда это helps- TheSilkCode

 Смежные вопросы

  • Нет связанных вопросов^_^