Mam zmienną globalną, która jest instancją mojej klasy niestandardowej.
Jak sprawdzić, czy obiekt jest ustawiony lub czy muszę go zainicjować?
Mam zmienną globalną, która jest instancją mojej klasy niestandardowej.
Jak sprawdzić, czy obiekt jest ustawiony lub czy muszę go zainicjować?
Odpowiedzi:
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Lub, jeśli wolisz odwrotnie:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
to NIE to samo, co sprawdzanie IsNothing(obj)
! Dzięki za poprawną składnię, aby to sprawdzić ... nie wiem, dlaczego IsNothing()
zachowuje się inaczej ...
Not (obj Is Nothing)
łatwiejsze do zrozumienia niż Not obj Is Nothing
. Mój mózg nie wie, co to jest „nie przedmiot”!
(Nie) bezpieczny sposób na zrobienie tego - jeśli nie masz nic przeciwko nieużywaniu opcji jawnej - to ...
Not TypeName(myObj) = "Empty"
Obsługuje to również przypadek, jeśli obiekt nie został zadeklarowany. Jest to przydatne, jeśli chcesz po prostu zakomentować deklarację, aby wyłączyć pewne zachowanie ...
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
Działa to, ponieważ VBA automatycznie utworzy wystąpienie niezadeklarowanej zmiennej jako typu Empty Variant. Eliminuje potrzebę stosowania pomocniczego boole'a do zarządzania zachowaniem.
Option Explicit
. Nic nie zyskuje poza problemami. Aby „zmienić” zachowanie, użyj kompilacji warunkowej.