变体但不是对象

Gre*_*edo 4 excel vba variant

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

Sub mySubExpectingAnObject(myVal As Object)
Run Code Online (Sandbox Code Playgroud)

哪个更明确

Sub mySubExpectingAnObject(myVal As Variant)
Run Code Online (Sandbox Code Playgroud)

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

相反,如果我知道的数据位是不是一个对象,但也可以是其他任何东西(Long,Double,String等),有没有什么办法Dim荷兰国际集团的说法是不是对象.例如

Sub mySubExpectingNotAnObject(myVal As NotObject)
Run Code Online (Sandbox Code Playgroud)

因为如果我Variant在这里使用,就不会有自动反对象检查.这种类型是否存在; 一个可以独占封装任何非对象数据类型的?是否有其他解决方法

If isObject(myVal) Then Err.Raise 5
Run Code Online (Sandbox Code Playgroud)

或者类似的?

Mat*_*don 7

我没有看到使用a Variant和抛出无效的过程调用或参数运行时错误5有什么问题,这几乎字面上说"这个过程是用无效的参数调用的",给出了IsObject(theParameter)返回True.

Variant存在专门解除编译时类型的限制,这样VBA可以应对国外类型,如IUnknown和诸如此类的东西:有没有办法,你可以使用Variant 执行任何类型的编译时检查的反对- 定义一个Variant的类型只在运行时解决.

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

没有"变体但不是对象"类型,并且您不能Variant在编译时使用a 并期望任何类型的验证.