变体但不是对象
Variant but not an Object
如果我知道一些数据将成为一个对象,但我不知道是什么类型,我可以像这样将它传递给一个函数或例程:
Sub mySubExpectingAnObject(myVal As Object)
比
更明确
Sub mySubExpectingAnObject(myVal As Variant)
并且应该是首选,即使两者都有效
如果相反,我知道数据位 不是 对象,但可以是任何其他对象(Long
、Double
、String
等),有没有办法 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
并期望在编译时进行任何类型的验证。
如果我知道一些数据将成为一个对象,但我不知道是什么类型,我可以像这样将它传递给一个函数或例程:
Sub mySubExpectingAnObject(myVal As Object)
比
更明确Sub mySubExpectingAnObject(myVal As Variant)
并且应该是首选,即使两者都有效
如果相反,我知道数据位 不是 对象,但可以是任何其他对象(Long
、Double
、String
等),有没有办法 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
并期望在编译时进行任何类型的验证。