对于自定义对象,我想测试两个条件。首先是对象是否一无所获。如果是,请输入该块。如果对象不是什么,我想对其中一个对象的属性进行测试,只有在通过此测试时才输入该块。
所以声明将类似于:
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
为清晰而编辑
答案 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)
它无法帮助您解决代码问题,但我想我会在维基百科页面上包含指向短路操作员评估的指针:
它包含一个有用的通用语言常用运算符表,分类它们是否遵守短路语义或总是急切地评估。在VBA的特定基础中,他们确认And
和Or
的操作数确实热切地评估。
答案 2 :(得分:1)
虽然这有点不寻常,但您也可以执行以下操作:
Select Case True
Case myObject Is Nothing, myObject.myInt > x
'Perform task
End Select
选择隐式比较将使用短路评估。 “或”不会。