2012-12-13 16 views
6

私は解決できないほど難解な問題があります。object.Value = Nullを比較しても期待通りの結果が得られません

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

基本的に、私はユーザーがデータを入力してボタンをヒットするアンバウンドボックスを持っています。確認ボックスがYESになると、バインドされていないボックスのデータがバインドボックスにコピーされます。ただし、ユーザーが何も入力しないと、空のバインドフィールドが作成されます。このフィールドは、クエリを深刻に混乱させる可能性があります。

言われているように、上記のコードは単に私のためには機能しません。たとえば、Me.Bank_Credit.Value = 1と設定して実行すると、1は2秒になります。しかし、それは単純にヌル、あるいは ""でも働くことを拒否します。

私はこの問題の簡単な解決策があると確信しています。私はそれを理解できません。

答えて

16

何がNullではなく、さらに別のNULLに今までに等しいではありません事前に

感謝。何もNullと等しくないものはありません.Nullもありません。あなたが期待する、あるいはFalse可能性があるとしてBank_Creditが...次の式はNULLを返します、True NULLでない

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

これは、イミディエイトウィンドウで、この結果も同じ理由です:

Debug.Print Null = Null 
Null 

IsNull()機能を使用してください。

If IsNull(Me.Bank_Credit.Value) Then 

また、Nz()ヘルプトピックを参考にして、役立つかどうかを確認してください。あなたはこれを行うことができますが、実際にはIsNull()以上の改善ではありません。しかし、Nz()は他のVBAコードに非常に便利です。

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

Nullの場合、 '='は比較器として使用できませんが(x = Nullの場合)、代入命令(x = Null)として使用できます。 –

+0

ああ、それは働いた! 非常に高く評価されています。 – user1706975

4

HansUpの答えは正しいですが、私はそれが関連する基本的に間接参照されたオブジェクトのためのVBAのキーワードである「ナッシング」のための類似した構造があることを追加すると思いました。あなたはこれらすべてのVBAのヘルプファイルを超える文の並べ替え(および実際にこれに似たキーワードを持つ他の言語で)が表示されます

If myRange is Nothing Then 

のようなステートメントを使用する必要があります。

関連する問題