web-dev-qa-db-ja.com

テキストボックスのヌルの問題

Accessフォームにテキストボックスとボタンがあります。ボタンのクリックイベントで、テキストボックスが空かどうかを確認します。空の場合、何も実行されません。だから私は使う

If Me.textbox.Value = Null Then
    Exit Sub
End if

しかし、動作しません...実行ウィンドウでtextbox.valueをチェックしましたが、それはNullですが、if句が動作しません...なぜですか?

編集:@Dimse、「」を試しましたが、動作しません。また、textbox.text = Null、テキストボックスがアクティブではないことを知らせるエラーをポップします。非常に奇妙です。

22
darkjh

Nullは、Nullであっても、決して等しくなりません。 IsNull()関数を使用します。

If IsNull(Me.textbox.Value) Then

Me.textboxに空の文字列が含まれている場合とNullの場合とで同じように処理する場合は、空の文字列を連結し、結合された文字列の長さを確認します。

If Len(Me.textbox.Value & "") = 0 Then

空の文字列には、文字列リテラル""の代わりに、名前付き定数vbNullStringを使用することもできます。

If Len(Me.textbox.Value & vbNullString) = 0 Then

文字列リテラルを使用するには、VBAが毎回その文字列をゼロから構築する必要があります。名前付き定数を使用すると、VBAはそれを参照するだけでよいため、より高速で、より少ないメモリを使用する必要があります。ただし、多くの場合(おそらくほとんどの場合)、vbNullStringを使用した場合のパフォーマンス上の利点は非常に小さいため、違いに気付かないでしょう。 David-W-Fenton から 以下のコメント も参照してください。

私にとって、vbNullStringを使用するより説得力のある理由は、それが私の老齢の目ですぐに認識できることです。逆に、文字列リテラルでは、""が実際に他のものではないことを確認するのに(ほんの少し)時間がかかります... " ""'"など。 IMOのvbNullStringの唯一の欠点は、""よりも多くの入力が必要なことです。

最後に、実際にValueプロパティを明示的に参照する必要はありませんが(テキストボックスのデフォルトプロパティなので)、そのままにしておいたので、明示的にしたいので、そのままにしておきました。 Valueもあります。 :-)

55
HansUp

私は死者を目覚めさせたことについても謝罪しますが、VBAで非常に人気があり、使用可能なNz Function(それを参照してください @ MSDN ) Access/SQLおよび私の意見では、式のnull値を許容するより便利で簡潔で強力なソリューションです。

3
rfb

死者を目覚めさせてしまったことをおaびしますが、完全を期すために スペースのテスト方法(同様に '空/空'も)をテストする方法 :を提供します。

If IsNull(Me.Textbox) Or Trim(Me.Textbox) = vbNullString Then
If Trim(Me.Textbox & vbNullString) = vbNullString Then 'Shorter version
If Len(Trim(Me.Textbox) & vbNullString) = 0 Then 'Shortest version

スペース、空/ ZLS、およびNULLの処理方法を探してここに来ました

2
gregg

サブを次のように展開します。

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
    Exit Sub
End if
1
Mark Mooibroek

Nullは別のNullと等しくありません;)

isNull(Me.textbox.Value)の場合If try

1
Scorpio

Nullではなく、空の文字列 ""をチェックする必要があると思います。

0
Dimse

2番目の基準を使用するだけで、うまくいきます!!
この場合、「チェック」のような単純な単語です。

If Forms![Basic]![Table.Item] & "check" = "check" Then

MsgBox "Field Empty"

Else

MsgBox "Field Not Empty"

End If
0
Rambler

KeyUPイベントを使用していたため、これを機能させることができませんでした。だから代わりに、これは私のために働いたものです。

If(Textbox.Text = '') 
  ...

Textbox.Valueは変更イベントでのみ更新されるため、キーアップでは更新されなかったため、Textbox.Textは現在ボックスにあるものです。

概要:または、.Textプロパティを使用します

0
twoLeftFeet