VBA:使用Or时抛出错误(在If-Then语句中),第一个条件测试对象是否为空

时间:2012-07-05 03:46:36

标签: vba if-statement short-circuiting

对于自定义对象,我想测试两个条件。首先是对象是否一无所获。如果是,请输入该块。如果对象不是什么,我想对其中一个对象的属性进行测试,只有在通过此测试时才输入该块。

所以声明将类似于:

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

为清晰而编辑

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

它无法帮助您解决代码问题,但我想我会在维基百科页面上包含指向短路操作员评估的指针:

  

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

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

答案 2 :(得分:1)

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

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

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