2009-09-08 14 views
5

単純なシナリオ:フォームと1つのテキストボックス(バインドされていない)、Text1バインドされていないコントロールに値があるかどうかを確認する適切な方法

If "" <> Text1 Then 
    MsgBox "Not Empty" 
End If 

上記のコードは機能します。テキストボックスに文字が含まれている場合、式""<> Text1はTrueと評価されます。

反対が動作しないに関係なく、テキストボックスの空またはない:

If "" = Text1 Then ' or alternatively, False = ("" <> Text1) 
    MsgBox "Empty!" 
End If 

あなたがこの問題を明確にすることはできますか?

+0

あなたは本当にあなたが見ているコントロールの親を指定する必要があります!。より読みやすいコードを作成し、コンパイルエラーを回避します。 –

答えて

5

テキストボックスには何も含まれていない場合は通常null、これは長さゼロの文字列( "")と同じではありません。

If Trim(Text1 & "") = vbNullString 
    'Empty 

これは、テキストボックスに空白や長さゼロの文字列またはnullが含まれている場合にtrueになります。

+0

@Remou、私は 'Text1&" "部分を好きです。これは、null値への代入を避けるためのスマートな方法です。ありがとう。 –

+2

なぜ "Me!Text&vbNullString = vbNullString"ではないのですか? Trim()は、1つ以上のスペースを持つテキストボックスをNullテキストボックスと同等に扱うことを除いて、目的を果たさない。バインドされていないテキストボックスは複数のスペースを含むことはできませんが、バインドされたテキストボックス*にはそれらが含まれている可能性があります(ただし、フォームコントロール内の編集には影響しません)。 –

+0

私は、vbNullStringは長さがゼロの文字列である定数の特に良い名前ではないと感じています。そのため、2つの形式がより明確になると思いました。 – Fionnuala

4

また、さまざまな変数タイプを扱うときにそのような種類のチェックに役立つ小さな関数があります。ブランクかどうかを知りたいだけです。

'-----------------------------------------------------------------------------' 
' True if the argument is Nothing, Null, Empty, Missing or an empty string. ' 
'-----------------------------------------------------------------------------' 
Public Function IsBlank(arg As Variant) As Boolean 
    Select Case VarType(arg) 
     Case vbEmpty 
      IsBlank = True 
     Case vbNull 
      IsBlank = True 
     Case vbString 
      IsBlank = (arg = vbNullString) 
     Case vbObject 
      IsBlank = (arg Is Nothing) 
     Case Else 
      IsBlank = IsMissing(arg) 
     End Select 
End Function 

今日はMade a blog postです。

+0

あなたのルーチンは便利になるでしょう。非常に良い答えは、ありがとう。 –

1

私はいつもfunction Nz (variable, valueIfNull)を使ってそのようなことを確認しています。たとえば、次のように

if (Len(Nz(Me.txt1, "")) > 0) then 
     'Me.txt1 does not contain a value 
end if 

または私はレコードセットにテキストボックスの値を保存したい場合:つまり、私のText1を

rst!Name = Nz(Me.txtName, "No name given") 
+0

ありがとうMarkus。私はその機能を知らなかった。 –

関連する問題