2012-12-13 23 views
6

Bu yüzden çözemediğim rahatsız edici derecede basit bir sorun var.Comparing object.Value = Null beklenen sonucu üretmiyor

If Me.Bank_Credit.Value = Null Then 
Me.Bank_Credit.Value = 0 
End If 

Temelde, kullanıcı veri girdiğinde bir ilişkisiz kutusu var ve sonra bir düğmeye vurur. Onay kutusundaki bir YES'ten sonra, bağlanmamış kutudaki veriler cilt kutusuna kopyalanır. Bununla birlikte, kullanıcı herhangi bir şey girmezse, bu da yoldaki sorguları ciddi şekilde bozabilecek boş bir alan oluşturur. Yukarıdaki kod sadece benim için çalışmayacaktır demektedir. Örneğin, Me.Bank_Credit.Value = 1 ise ve çalıştırırsam, 1s olması gerektiği gibi 2s'ye dönüşür. Ancak sadece Null veya hatta "" için çalışmayı reddediyor.

Bu sorunun basit bir çözümü olduğundan eminim, bunu çözemiyorum.

cevap

16

Hiçbir şey Null bile başka null olarak şimdiye eşittir önceden

teşekkürler. Ve hiçbir şey hiçbir zaman Null'a eşit değil, başka bir boş Null bile değil. Bank_CreditBoş olduğunda

aşağıdaki ifade Tahmin edebileceğiniz gibi ... değil True Null dönmek, hatta False olacaktır.

Debug.Print Null = Null 
Null 

Kullanım IsNull() fonksiyonu:

Debug.Print (Me.Bank_Credit.Value = Null) 

Bu komut penceresi içinde bu sonucun aynı sebep.

If IsNull(Me.Bank_Credit.Value) Then 

Ayrıca, yararlı olabilir olup olmadığını görmek için Nz() yardım konusuna bakın. Bunu, IsNull() üzerinde bir gelişme olmamasına rağmen yapabilirsiniz. Ancak Nz() diğer VBA kodları için çok uygun olabilir.

Me.Bank_Credit = Nz(Me.Bank_Credit, 0) 
+4

Nulls'a gelince, '=' bir karşılaştırıcı olarak kullanılamaz (eğer x = Null ise) ancak yine de bir atama komutu olarak kullanılabilir (x = Boş). –

+0

Aha, işe yaradı! Çok beğenildi. – user1706975

4

HansUp cevabı haklı, ama alakalı temelde dereferenced nesne için bir VBA anahtar kelimedir "Hiçbir şey" için benzer bir yapı olduğunu eklemeyi düşündük. Sen (bu bir keyword benzer olan diğer dillerde aslında ve) Tüm VBA yardım dosyaları üzerinde tabloların bu tür göreceksiniz

If myRange is Nothing Then 

gibi ifadeleri kullanmak zorunda.