У меня есть глобальная переменная, которая является экземпляром моего пользовательского класса.
Как мне проверить, установлен ли объект или мне нужно его инициализировать?
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
. Ничего не получает, кроме проблем. Чтобы «переключить» поведение, используйте условную компиляцию.