2010-04-13 18 views

Odpowiedz

80
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 
+0

Wiedziałem, że to musi być proste, gdy go wyszukiwałem i nic nie znalazłem! Dzięki za pomoc! – Icode4food

+16

Wyszukiwanie Nic nie było poprawną odpowiedzią! ;) –

+3

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 ... –

0

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.

+1

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

+0

@ 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? –

Powiązane problemy