Mam zmienną globalną, która jest instancją mojej klasy niestandardowej.
Jak sprawdzić, czy obiekt jest ustawiony lub czy muszę go zainicjować?
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 sprawdzanieIsNothing(obj)
! Dzięki za poprawną składnię, aby to sprawdzić ... nie wiem, dlaczegoIsNothing()
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.
źródło
Option Explicit
. Nic nie zyskuje poza problemami. Aby „zmienić” zachowanie, użyj kompilacji warunkowej.