如果我知道一些数据将成为一个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)
或者类似的?
我没有看到使用a Variant和抛出无效的过程调用或参数运行时错误5有什么问题,这几乎字面上说"这个过程是用无效的参数调用的",给出了IsObject(theParameter)返回True.
Variant存在专门解除编译时类型的限制,这样VBA可以应对国外类型,如IUnknown和诸如此类的东西:有没有办法,你可以使用Variant 和执行任何类型的编译时检查的反对- 定义一个Variant的类型只在运行时解决.
解决这个问题的惯用方法是为您的程序及其参数使用好的,有意义的名称.很难用你所拥有的例子来推荐任何东西.
没有"变体但不是对象"类型,并且您不能Variant在编译时使用a 并期望任何类型的验证.