У меня есть глобальная переменная, которая является экземпляром моего пользовательского класса.
Как мне проверить, установлен ли объект или мне нужно его инициализировать?
У меня есть глобальная переменная, которая является экземпляром моего пользовательского класса.
Как мне проверить, установлен ли объект или мне нужно его инициализировать?
Ответы:
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
obj Is Nothing
- это НЕ то же самое, что проверка IsNothing(obj)
! Спасибо за правильный синтаксис для проверки ... не уверен, почему IsNothing()
ведет себя по-другому ...
Not (obj Is Nothing)
легче понять, чем Not obj Is Nothing
. Мой мозг не знает, что такое «Not obj»!
(Не) безопасный способ сделать это - если вы не против не использовать явную опцию - это ...
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 автоматически создает экземпляр необъявленной переменной как пустой тип варианта. Это устраняет необходимость во вспомогательном логическом значении для управления поведением.
Option Explicit
. Ничего не получает, кроме проблем. Чтобы «переключить» поведение, используйте условную компиляцию.