Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 变体而非对象_Excel_Vba_Variant - Fatal编程技术网

Excel 变体而非对象

Excel 变体而非对象,excel,vba,variant,Excel,Vba,Variant,如果我知道一点数据将成为一个对象,但我不知道是什么类型的,我可以将其传递给函数或例程,如下所示: Sub mySubExpectingAnObject(myVal As Object) 这比 Sub mySubExpectingAnObject(myVal As Variant) 即使两者都起作用,也应优先考虑 相反,如果我知道数据位不是对象,但可以是其他任何东西(Long,Double,String等),是否有任何方法将参数设置为非对象。例如 Sub mySubExpectingNotAn

如果我知道一点数据将成为一个对象,但我不知道是什么类型的,我可以将其传递给函数或例程,如下所示:

Sub mySubExpectingAnObject(myVal As Object)
这比

Sub mySubExpectingAnObject(myVal As Variant)
即使两者都起作用,也应优先考虑

相反,如果我知道数据位不是对象,但可以是其他任何东西(
Long
Double
String
等),是否有任何方法将参数设置为非对象。例如

Sub mySubExpectingNotAnObject(myVal As NotObject)
因为如果我在这里使用
Variant
,将不会自动进行反对象检查。是否存在这样的类型;一个可以以独占方式封装任何非对象数据类型的数据类型?除此之外还有其他解决办法吗

If isObject(myVal) Then Err.Raise 5

或者类似的?

我看不出使用
变量
并抛出无效的过程调用或参数运行时错误5有什么不对,因为
IsObject(参数)
返回
True
,这实际上是说“此过程是用无效参数调用的”

Variant
的存在是为了解除编译时类型约束,以便VBA可以处理外来类型,例如
IUnknown
等等:您无法使用
Variant
并对其执行任何类型的编译时检查-根据定义,
Variant
的类型只能在运行时

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


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

这里回答了这个问题:在带有^link的assoc中,Const vbObject=9。但是请注意,您的问题是关于Dim而不是测试的。…
Variant
的存在是为了消除编译时类型限制,隐式类型转换不会弄糟这些限制。。。可能还需要一个
字符串
,然后从那里转换。为什么它的“否”很重要?