如何使用用户定义类型?

3
每当我尝试将UDT传递给其他函数时,就会出现以下编译错误:“只有在公共对象模块中定义的用户定义类型才能强制转换为或从变量中传递或传递到后期绑定函数。” 我已经测试过的唯一一个内部函数是VarPtr,它可以使用UDT作为参数。我甚至不能使用TypeName或VarType。是否有一种方式可以传递UDT作为不明确期望具体类型的参数?与Variant类似但是用于UDT。我还想将UDT存储在数组/字典/集合中,但这似乎也存在问题。UDT对我的需求非常完美(不必拥有单独的类模块),但它们似乎非常严格类型化(如果这是正确的术语)。编辑:看起来VarPtr将参数作为“Any”类型,因此可能是接受Variant和UDT的类型。问题是,Excel内置的VBA IDE不允许我使用该类型。

所有这些都已经在一个模块中了,而不是类模块。我想把所有东西都定义在一个模块中,而不是多个模块中。 - Hao Zhang
1
通过对自己施加这种限制,你将会让自己陷入一片痛苦的世界。 - chris neilsen
2
阅读错误信息。它很具体:“只有在公共对象模块中定义的用户定义类型才能被强制转换为变量或传递给后期绑定函数。” - user6017774
这是一个类模块。因此,用户定义类型(UDT)成为COM对象的对象模型的一部分。对于非COM使用的UDT,它们以传址方式传递,例如Win32 API结构体。您的COM对象模型是由类模块中的公共子程序、函数、属性和变量构建的。 - user6017774
仅适用于COM。您可以在API调用和VB内部使用UDT,而无需使用类模块。类模块会转换为类型库。COM在不知道其他程序的情况下协调这些程序之间的通信(服务器一无所知,客户端只知道类型库中的内容)。因此,通过COM进行进程间调用的数据必须是公开定义的,否则其他程序将不知道它是什么。在VB中,VB会跟踪这些数据并确切知道它们是什么。只需使用制表符分隔的字符串即可。 - user6017774
显示剩余7条评论
1个回答

1
所以,您只能在声明它们的模块内使用UDT-因此,很可能您在一个模块中声明了UDT,当不同模块中的函数尝试使用您的UDT时,会生成错误...
我认为根据您的问题,您正在寻找类似于UDT的自定义类,但它们可以在整个项目中使用,并且甚至可以像您要求的那样作为参数传递给和从函数中传递。
希望这有所帮助- TheSilkCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接