VBA проверить, если объект установлен

48

У меня есть глобальная переменная, которая является экземпляром моего пользовательского класса.

Как проверить, установлен ли объект или требуется ли его инициализировать?

Теги:
ms-access

2 ответа

75
Лучший ответ
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
  • 0
    Я знал, что это должно быть просто, когда я погуглил это и ничего не нашел! Спасибо за вашу помощь!
  • 19
    Поиск ничего не был правильный ответ! ;)
Показать ещё 3 комментария
0

(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. Это устраняет необходимость в вспомогательном логическом для управления поведением.

  • 1
    Ни у кого не должно быть кода VBA без Option Explicit . Ничего не получает, кроме проблем. Чтобы «переключить» поведение, используйте условную компиляцию.
  • 0
    @andre, да, справедливо. Я чувствую себя хорошо без этого, потому что я использую венгерскую нотацию для области видимости, но я стараюсь избегать vba в эти дни, если могу. Большая часть того, что я вижу, касается явных деклараций, безопасности имен и избегания страшных вариантов. Каковы ваши основные причины?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню