I have a global variable that is an instance of my custom class.
How do I check if the object is set or if I need to initialize it?
I have a global variable that is an instance of my custom class.
How do I check if the object is set or if I need to initialize it?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Or, if you prefer it the other way around:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
is NOT the same as checking IsNothing(obj)
! Thanks for the correct syntax to check this...not sure why IsNothing()
behaves differently... –
Darwinism Not (obj Is Nothing)
easier to understand than Not obj Is Nothing
. My brain doesn't know what a "Not obj" is! –
Koo 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 Object
Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object
'Dim myObj as Object
Not 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.
Option Explicit
. It gains nothing except problems. To "switch" behavior, use Conditional Compiling. –
Tanjatanjore 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 set
Else
'set obj
End 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 If
End If
© 2022 - 2024 — McMap. All rights reserved.