VBA check if object is set
The (un)safe way to do this - if you are ok with not using option explicit - is...
Not TypeName(myObj) = "Empty"
This also handles the case if the object has not been declared. This is useful if you want to just comment out a declaration to switch off some behaviour...
Dim myObj as ObjectNot TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object'Dim myObj as ObjectNot TypeName(myObj) = "Empty" '/ false, the object has not been declared
This works because VBA will auto-instantiate an undeclared variable as an Empty Variant type. It eliminates the need for an auxiliary Boolean to manage the behaviour.
When using global variables it's possible to run into a situation in which the object is empty. So, the code:
If Not obj Is Nothing Then 'obj is already setElse 'set objEnd If
produces an 'object required' error.
In this situation, the following works:
'First check it is initialized If IsObject(obj) Then 'Then check if it is set If Not obj Is Nothing Then 'obj is set Else 'set obj End IfEnd If