Error handling VB6中VarType返回的vbError是什么?

Error handling VB6中VarType返回的vbError是什么?,error-handling,vb6,Error Handling,Vb6,我一直在网上搜索这个,但是所有的东西都在谈论ErrObject类,或者VarType函数返回的常量vbError。我想知道这种类型实际上是什么,例如,整数类似于4,字符串类似于“hello world”,等等 作为一个小背景,这里有一个指向官方MSDN页面的链接,内容是关于VarType,其中显示了它返回的所有常量及其表示的内容。什么是错误值?在VB6和VBA中,通过调用函数创建错误值 此函数返回VarType为vbError的变量,IsError函数为其返回True 这方面的典型用例是返回变量

我一直在网上搜索这个,但是所有的东西都在谈论
ErrObject
类,或者
VarType
函数返回的常量
vbError
。我想知道这种类型实际上是什么,例如,
整数
类似于
4
字符串
类似于
“hello world”
,等等


作为一个小背景,这里有一个指向官方MSDN页面的链接,内容是关于
VarType
,其中显示了它返回的所有常量及其表示的内容。什么是
错误值?

在VB6和VBA中,通过调用函数创建错误值

此函数返回VarType为vbError的变量,
IsError
函数为其返回
True


这方面的典型用例是返回变量的Excel UDF:如果返回错误值,它将显示为#value

如果您熟悉C/C++中的COM,您应该知道从这个角度来看,
VarType()
是一个简单的函数,它从作为参数传入的
变量中提取
vt
成员的值。
vt
成员的可能值记录在许多地方,例如

如果您检查COM系统头的内部(例如,作为Windows SDK的一部分分发的WTypes.h),您将看到
VbError
值10确实映射到
VT\u ERROR
的C/C++枚举值

enum VARENUM
    {  VT_EMPTY   = 0,
       ...
       VT_ERROR  = 10,
       ...
    } ;
上面的MSDN链接将等于
vt\u错误的
vt
的含义描述如下:

指定了一个SCODE。错误类型在scode中指定。 通常,对错误值的操作应引发异常或将错误传播到返回值(视情况而定)

这就是它的基本含义:

变体
显然支持存储多种类型的值,其中之一是存储“错误代码”的可能性很小。更准确地说,这些代码被正式称为
scode
,因为它们可以表示多种类型的“成功”和“失败”。大多数人将这些代码称为
HRESULT
s

这些代码与在VB6中从
Err.Number
获得的“错误代码”类型相同。因此,您可以告诉一个
变体
,以区分“错误代码”和普通数字

实际上,很少有程序或COM组件(如果有的话)会在变体中放入错误代码。几乎每个人都会发布COM异常来传递错误(这种机制在VB6中通过
Err
对象公开)。即使是那些在COM异常机制之外返回错误代码的组件,也可能在类型化变量(例如
Long
)中返回错误代码

因此,存在此可能返回值的原因是为了完整性。在现实生活中你几乎看不到它


(编辑:删除无法创建“错误”变体的部分。@Joe证明了我的错误。您可以使用
CVErr()
创建一个变量)

感谢您提供的详细答案。虽然我无法解决导致我发布此问题的问题,但这仍然提供了信息。@JoeMajsterski,乐于帮助;这也让我学到了一些新东西。那么,实际的问题是什么?这个问题不清楚。这是一个非常奇怪的问题。这里我还有一个问题:我将用细节展开。还有一点,您不能隐式地将这些错误转换为键入long或integer。仅供参考,在VBscript中,由array()函数创建的数组在参数列表中的位置为空,将创建一个具有预期元素数的数组,但当访问空元素时,其类型为vbError。因此,VarType(数组(1,2,3)(1))返回vbError。我有一个遗留的VB6应用程序,它使用带有模板标记的脚本文件,从DB数据构建动态vbscript。我希望将带有空位置的参数列表呈现给Array()函数会在访问这些位置时导致vbNull,但不幸的是,情况并非如此。