VBA nesnenin ayarlanıp ayarlanmadığını kontrol edin


91

Özel sınıfımın bir örneği olan global bir değişkenim var.

Nesnenin ayarlanıp ayarlanmadığını veya onu başlatmam gerekip gerekmediğini nasıl kontrol ederim?

Yanıtlar:


138
If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

Veya tam tersini tercih ederseniz:

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If

2
Google'da aradığımda ve hiçbir şey bulamadığımda basit olması gerektiğini biliyordum! Yardımınız için teşekkürler!
Icode4food

3
Kontrol obj Is Nothingetmenin kontrol etmekle aynı şey OLMADIĞINI unutmayın IsNothing(obj)! Bunu kontrol etmek için doğru sözdizimi için teşekkürler ... neden IsNothing()farklı davrandığından emin değilim ...
Matt Browne

1
Anlamaktan Not (obj Is Nothing)daha kolay buluyorum Not obj Is Nothing. Beynim "obj değil" nin ne olduğunu bilmiyor!
Martin F

Ayrıca şunu da yazabilirsiniz: If obj IsNot Nothing ki onu diğerlerinden çok daha net buluyorum. Ayrıca C # (ojb! = Null)
Alexandre

4

Bunu yapmanın (un) güvenli yolu - seçeneği açıkça kullanmamakta sorun yoksa - ...

Not TypeName(myObj) = "Empty"

Bu aynı zamanda nesne bildirilmemişse durumu da ele alır. Bazı davranışları kapatmak için bir bildirimi yorumlamak istiyorsanız, bu yararlıdır ...

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

Bu işe yarar çünkü VBA, bildirilmemiş bir değişkeni Boş Değişken türü olarak otomatik olarak başlatır. Davranışı yönetmek için yardımcı bir Boolean gereksinimini ortadan kaldırır.


4
Hiç kimse onsuz herhangi bir VBA koduna sahip olmamalıdır Option Explicit. Sorunlar dışında hiçbir şey kazanmaz. Davranışı "değiştirmek" için Koşullu Derlemeyi kullanın.
Andre

@andre, evet, adil nokta. Onsuz kendimi iyi hissediyorum çünkü kapsam için Macarca notasyon kullanıyorum, ancak bu günlerde mümkünse vba'dan kaçınmaya çalışıyorum. Gördüğüm şeylerin çoğu açık beyanlar, isim güvenliği ve korkunç varyantlardan kaçınmakla ilgili. Temel nedenleriniz neler?
Cool Blue

Aslında tür adı nedeniyle "Hiçbir şey"
alıyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.