AndAlso/OrElse in VBA
The only short circuiting (of a sort) is within Case
expression evaluation, so the following ungainly statement does what I think you're asking;
Select Case True Case (myObject Is Nothing), Not myObject.test() MsgBox "no instance or test == false" Case Else MsgBox "got instance & test == true" End SelectEnd Sub
This is an old question, but this issue is still alive and well. One workaround I've used:
Dim success As Boolean ' False by default.If myObj Is Nothing Then ' Object is nothing, success = False already, do nothing.ElseIf Not myObj.test() Then ' Test failed, success = False already, do nothing.Else: success = True ' Object is not nothing and test passed.End IfIf success Then ' Do stuff...Else ' Do other stuff...End If
This basically inverts the logic in the original question, but you get the same result. I think it's a cleaner solution than the others here that only use If
statements. The solution using a Select
statement is clever, but if you want an alternative using only If
statements, I think this is the one to use.
Or you could create a function that takes your object as a parameter and returns boolean for either case. That's what I usually to.
i.e.
if Proceed(objMyAwesomeObject) then 'do some really neat stuff hereelse 'do something else, ehend if...end subprivate function Proceed(objMyAwesomeObject as Object) if not objMyAweseomeObject is nothing then Proceed = true elseif objMyAwesomeObject.SomeProperty = SomeValue then Proceed = true else Proceed = false endifend function