变体但不是对象

Variant but not an Object

如果我知道一些数据将成为一个对象,但我不知道是什么类型,我可以像这样将它传递给一个函数或例程:

Sub mySubExpectingAnObject(myVal As Object)

更明确
Sub mySubExpectingAnObject(myVal As Variant)

并且应该是首选,即使两者都有效

如果相反,我知道数据位 不是 对象,但可以是任何其他对象(LongDoubleString 等),有没有办法 Dim 将参数作为非对象。例如

Sub mySubExpectingNotAnObject(myVal As NotObject)

因为如果我这里用Variant,就没有自动反对象检查了。是否存在这样的类型?一个可以专门封装任何非对象数据类型的?除了

之外还有其他解决方法吗
If isObject(myVal) Then Err.Raise 5

或类似?

我不明白使用 Variant 并抛出 无效过程调用或参数 运行-time 错误 5 有什么问题,这很漂亮很多 字面上 说 "this procedure was invoked with an invalid argument",给定 IsObject(theParameter) 返回 True

Variant 存在 专门 解除编译时类型约束,以便 VBA 可以处理外部类型,例如 IUnknown 和诸如此类:您无法使用 Variant 对其强制执行任何类型的编译时检查 - 根据定义 Variant 的类型仅在 运行 时解析。

解决这个问题的惯用方法是为您的过程及其参数使用好的、有意义的名称。很难用你的例子推荐任何东西。

没有 "variant but not an object" 类型,您不能使用 Variant 并期望在编译时进行任何类型的验证。