VBA перевіряє, чи встановлено об’єкт


89

У мене є глобальна змінна, яка є екземпляром мого користувацького класу.

Як мені перевірити, чи встановлений об’єкт, чи потрібно його ініціалізувати?

Відповіді:


135
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

2
Я знав, що це повинно бути просто, коли я погуглив і нічого не знайшов! Спасибі за вашу допомогу!
Icode4food

3
Зверніть увагу, що перевірка obj Is Nothing- це НЕ те саме, що перевірка IsNothing(obj)! Дякую за правильний синтаксис, щоб перевірити це ... не впевнений, чому IsNothing()поводиться інакше ...
Метт Браун

1
Мені Not (obj Is Nothing)легше зрозуміти, ніж Not obj Is Nothing. Мій мозок не знає, що таке "Not obj"!
Martin F

Ви також можете написати: If obj IsNot Nothing, то я вважаю це набагато зрозумілішим за інші. Це також відчуває те саме, що і C # (ojb! = Null)
Олександр

4

(Не) безпечний спосіб зробити це - якщо у вас все гаразд, якщо не використовувати явний параметр - це ...

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 автоматично інстанціює незадекларовану змінну як тип порожнього варіанта. Це позбавляє від необхідності використання допоміжного логічного значення для управління поведінкою.


4
Ніхто ніколи не повинен мати коду VBA без Option Explicit. Це нічого не отримує, крім проблем. Щоб "змінити" поведінку, використовуйте умовне компілювання.
Андре

@andre, так, справедлива думка. Я відчуваю себе добре і без цього, тому що використовую угорські позначення для сфери дії, але я намагаюся уникати vba в наші дні, якщо можу. Більшість із того, що я бачу, стосується явних декларацій, безпеки імен та уникання страшних варіантів. Які ваші ключові причини?
Холодний синій

Насправді я отримую "Нічого" в результаті імені типу, а не "Порожній"
Патрік Лепелтьє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.