У меня есть глобальная переменная, которая является экземпляром моего пользовательского класса.
Как проверить, установлен ли объект или требуется ли его инициализировать?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Или, если вы предпочитаете это наоборот:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
(un) безопасный способ сделать это - если вы в порядке, не используя опцию явным - это...
Not TypeName(myObj) = "Empty"
Это также обрабатывает случай, если объект не был объявлен. Это полезно, если вы хотите просто прокомментировать объявление, чтобы отключить какое-то поведение...
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
Это работает, потому что VBA автоматически создаст необъявленную переменную как тип Empty Variant. Это устраняет необходимость в вспомогательном логическом для управления поведением.
Option Explicit
. Ничего не получает, кроме проблем. Чтобы «переключить» поведение, используйте условную компиляцию.