Mam zmienną globalną, która jest instancją mojej niestandardowej klasy.VBA sprawdź, czy obiekt jest ustawiony
Jak sprawdzić, czy obiekt jest ustawiony lub czy muszę go zainicjować?
Mam zmienną globalną, która jest instancją mojej niestandardowej klasy.VBA sprawdź, czy obiekt jest ustawiony
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 to na odwrót:
If Not obj Is Nothing Then
' obj already set/initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
The (nie) bezpieczny sposób to zrobić - jeśli są ok, z nie za pomocą opcji jednoznacznie - jest. ..
Not TypeName(myObj) = "Empty"
Zajmuje się również sprawą, jeśli obiekt nie został zadeklarowany. Jest to przydatne, jeśli chcesz po prostu skomentuj deklarację wyłączyć pewne zachowania ...
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
To działa, ponieważ VBA zostanie automatycznie instancję zmiennej niezgłoszonej jako pusty typu Variant. Eliminuje potrzebę dodatkowej funkcji Boolean do zarządzania zachowaniem.
Nikt nigdy nie powinien mieć żadnego kodu VBA bez 'Option Explicit'. Nie zyskuje nic poza problemami. Aby "przełączać" zachowanie, użyj kompilacji warunkowej. – Andre
@ andre, yes, fair point. Czuję się dobrze bez tego, ponieważ używam węgierskiej notacji dla zakresu, ale staram się unikać vba w tych dniach, jeśli mogę. Większość tego, co widzę, dotyczy wyraźnych deklaracji, bezpieczeństwa nazw i unikania przerażających wariantów. Jakie są twoje główne powody? –
Wiedziałem, że to musi być proste, gdy go wyszukiwałem i nic nie znalazłem! Dzięki za pomoc! – Icode4food
Wyszukiwanie Nic nie było poprawną odpowiedzią! ;) –
Zauważ, że sprawdzenie 'obj jest niczym 'NIE jest równoznaczne ze sprawdzeniem' IsNothing (obj) '! Dziękuję za poprawną składnię, aby to sprawdzić ... nie wiem, dlaczego 'IsNothing()' zachowuje się inaczej ... –