我一直在网上搜索这个,但一切都在谈论类,或者函数返回ErrObject
的常量。我想知道那个类型实际上是什么,例如 an是类似的东西,a是类似的东西,等等。vbError
VarType
integer
4
string
"hello world"
对于一些背景知识,这里是官方 MSDN 页面的链接 about VarType
,其中显示了它返回的所有常量以及它们所代表的含义。是什么Error value
?
我一直在网上搜索这个,但一切都在谈论类,或者函数返回ErrObject
的常量。我想知道那个类型实际上是什么,例如 an是类似的东西,a是类似的东西,等等。vbError
VarType
integer
4
string
"hello world"
对于一些背景知识,这里是官方 MSDN 页面的链接 about VarType
,其中显示了它返回的所有常量以及它们所代表的含义。是什么Error value
?
如果你熟悉 C/C++ 中的 COM,你应该知道,从这个角度来看VarType()
是一个简单的函数,它本质上是从作为参数传入的vt
成员中提取成员的值。Variant
成员的可能值vt
记录在许多地方,例如这里。
如果您检查 COM 系统头文件的内部(例如,作为 Windows SDK 的一部分分发的 WTypes.h),您将看到VbError
10 的值确实映射到 .c/C++ 枚举值VT_ERROR
。
enum VARENUM
{ VT_EMPTY = 0,
...
VT_ERROR = 10,
...
} ;
上面的 MSDN 链接描述了 a vt
that equals的含义,VT_ERROR
如下所示:
指定了 SCODE。错误的类型在scode中指定。通常,对错误值的操作应该引发异常或将错误传播到返回值,视情况而定。
所以,这基本上是它的意思:
AVariant
显然支持存储多种类型的值,其中包括存储“错误代码”的模糊可能性。更准确地说,这些代码正式称为scode
's,因为它们可以表示许多类型的“成功”和“失败”。大多数人将这些代码称为HRESULT
s。
这些代码与您Err.Number
在 VB6 中获得的“错误代码”相同。因此,您可以告诉 aVariant
将“错误代码”与纯数字区分开来。
实际上,很少有程序或 COM 组件(如果有的话)会在变体中放入错误代码。几乎每个人都只是发出 COM 异常来传达错误(这种机制在 VB6 中通过Err
对象公开)。即使是那些在 COM 异常机制之外返回错误代码的组件,也可能会在类型化变量(例如Long
's)中这样做。
因此,这个可能的返回值存在的原因是为了完整性。你几乎不会在现实生活中看到它。
(编辑:删除关于无法创建“错误”变体的部分。@Joe 证明我错了。你可以CVErr()
用来创建一个)
在 VB6 和 VBA 中,错误值是通过调用CVErr函数来创建的。
此函数返回一个 VarType 为 vbError 的 Variant,并且该IsError
函数为其返回True
.
一个典型的用例是返回 Variant 的 Excel UDF:如果返回错误值,它将显示为 #VALUE!。