У мене є глобальна змінна, яка є екземпляром мого користувацького класу.
Як мені перевірити, чи встановлений об’єкт, чи потрібно його ініціалізувати?
У мене є глобальна змінна, яка є екземпляром мого користувацького класу.
Як мені перевірити, чи встановлений об’єкт, чи потрібно його ініціалізувати?
Відповіді:
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
. Це нічого не отримує, крім проблем. Щоб "змінити" поведінку, використовуйте умовне компілювання.