我编写了一个返回用户定义类型的函数。
如果函数出现任何错误,我如何返回空UDT?
我尝试将函数设置为'Nothing',但它正在抛出'Object Required'错误。
提前致谢。
答案 0 :(得分:4)
如果可能,请改用Class / Object。甚至做一些像转这种类型一样简单的事情:
Public Type EmpRecord
FName As String
LName As String
HiredDate As Date
End Type
进入一个类可以通过在你的项目中添加一个名为EmpRecord的类来完成,其中包括:
Public FName As String
Public LName As String
Public HiredDate As Date
然后,您可以从检索记录时出错的函数返回Nothing。
答案 1 :(得分:2)
UDT不能为空。 您可以使用“虚拟”未初始化的UDT,也可以只将其所有成员设置回默认值。
答案 2 :(得分:2)
在VB6中,用户定义的类型是“值类型”,而类是“引用类型”。值类型通常存储在堆栈中(除非它们是类的成员)。引用类型存储为堆栈上的指针,指向堆中存储实际实例数据的位置。
这意味着对类的引用可以是Nothing
(指针为零),而值类型则不能。
有多种方法可以解决您的问题:
Boolean
成员添加到用户定义的类型中以表示成功或失败。Nothing
(tcarvin said)。Boolean
并获取ByRef
参数。如果函数结果为True
,则结果将写入传入的参数。 (很多人不喜欢这个,但这是你应该注意的常见解决方案。)打包机:
Public Type Wrapper
Success As Boolean
Inner As YourOriginalUDT
End Type
ByRef的功能:
Function Foo(ByRef Result As YourOriginalUDT) As Boolean
...
If Success Then
Foo = True
Result.A = A
Result.B = B
Result.C = C
... etc. ...
End If
End Function