【发布时间】:2016-11-16 14:35:15
【问题描述】:
多年来,我一直避免在 VBA 中使用 Public Type UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么.. 直到现在 - 创建一个更容易类模块并使用实际对象代替。
但最近我试了一下,一旦我认为必须将它们传递给 ByRef(就像数组一样),事情开始看起来我可以开始使用它们了。
所以我在标准模块中定义了一个Public Type,得到了这个编译错误:
所以我把Public Type移动到一个类模块中,创建了PublicNotCreatable类,然后得到了这个编译错误:
这里有一些代码可以重现编译错误。
类模块“某事”:
Option Explicit
' cannot define a public user-defined type within an object module
Public Type TSomething
Foo As Integer
End Type
Public Function Create(ByRef info As TSomething) As Something
End Function
如果您将TSomething 的定义移至标准模块,您将得到另一个编译器错误,告诉您必须在公共对象模块(即类模块)中定义公共UDT...带你回到第一格。
所以如果你不能在类模块中定义Public Type,为什么编译器会抛出一个合适甚至提及“在公共对象模块中定义的公共用户定义类型”如果这样的事情可以'不合法存在?
它是否在 VB6 中工作并且编译器消息是该版本的残余?或者是COM如何工作的原因?只是我还是两个错误消息相互矛盾?还是有什么我不明白的地方?
显然我在这里误用/滥用了 UDT。那么它们应该用于什么,如果不是将“记录”传递给某个方法呢?
【问题讨论】:
标签: vba com vb6 user-defined-types