0

对于自定义对象,我想测试两个条件。首先是对象是否是虚无。如果是,请输入该块。如果对象不是什么都不是,我想对对象的一个​​属性进行测试,只有通过了这个测试才进入块。

因此,该声明将类似于:

If myObject Is Nothing Or myObject.myInt > x Then
    'Perform my task
End If

如果 myObject 实际上什么都不是,则会引发错误,因为当它测试第二个条件时,它会尝试访问不存在的对象的属性。

如果发现第一个条件为真,我过去使用过的大多数语言都不会费心测试 Or 语句的第二个条件,因此您可以不用写上面的行。VBA 似乎不允许这样做。是否有任何等效的方式可以编写此声明,而无需诉诸:

If myObject Is Nothing Then
    'Perform my task
ElseIf myObject.myInt > x Then
    'Perform my task
End If

?

为清晰而编辑

4

3 回答 3

4

您可以创建一个标志:

PerformTheTask = False

If myObject Is Nothing Then
    PerformTheTask = True
ElseIf myObject.myInt > x Then
    PerformTheTask = True
End If

If PerformTheTask Then
    'Perform my task
End If
于 2012-07-05T04:09:33.700 回答
1

它不能帮助您解决代码问题,但我想我会在短路运算符评估中包含一个指向 Wikipedia 页面的指针:

http://en.wikipedia.org/wiki/Short-circuit_evaluation

它包括一个有用的常用语言常用运算符表,对它们是否遵守短路语义或总是急切地进行分类。在 VBA 的特定基础中,他们确认操作数AndOr确实被热切评估。

于 2012-07-05T04:13:12.273 回答
1

虽然这有点不寻常,但您也可以执行以下操作:

Select Case True
    Case myObject Is Nothing, myObject.myInt > x
        'Perform task
End Select

选择隐式比较将使用短路评估。“或”不会。

于 2012-07-05T05:34:19.923 回答