2011-01-28 8 views
0

このコードは機能しません。誰か助けてくれますか?onLost focusイベントが動作していません-msアクセス

Private Sub txtErrorComment_5_LostFocus() 

    If IsEmpty(Me.txtErrorComment_5) Then 
     MsgBox "Eh..! It cannot be Empty." 
    End If 

End Sub 
+1

"Empty"は、Variant型の初期化されていない変数のVB(A)の特別な値です。それは、あなたが思うことを意味するものではありません。 – RolandTumble

+3

これに対して、LostFocusは間違ったイベントです。代わりにBeforeUpdateを使用する必要があります。 –

+0

@ David-W-Fenton:聞いて、聞いてください。 – phoog

答えて

1

txtErrorComment_5はおそらくヌルである - のisEmpty(を介して実行する場合はFalseと評価された) - はい、これは非直感的ですが、あなたはNullに比較したときに、結果はfalseです。

次のことを試してみてください。

Private Sub txtErrorComment_5_LostFocus() 

    If IsEmpty(Me.txtErrorComment_5) or IsNull(Me.txtErrorComment_5) Then 
     MsgBox "Eh..! It cannot be Empty." 
    End If 

End Sub 

それとも:

Private Sub txtErrorComment_5_LostFocus() 

    If IsNull(Me.txtErrorComment_5) Then 
     MsgBox "Eh..! It cannot be Empty." 
    End If 

End Sub 

のIsNullがnullの

編集を処理することができます:デビッド・W・フェントン@

は正しいです。

Private Sub txtErrorComment_5_BeforeUpdate(Cancel As Integer) 

    If IsNull(Me.txtErrorComment_5) Then 
     MsgBox "Eh..! It cannot be Empty." 
     Cancel=true 
    End If 

End Sub 
+0

私はすでにこれを試しましたが、どちらもうまくいきませんでした。実際に私のフォームでは、チェックボックスがいっぱいになると、このテキストボックスが満たされていることが条件です。このロジックを実装する他の方法はありますか? – user397316

+0

IsEmpty()は、コントロールから有用な情報を返すことはありません。これはVariantデータ型の変数を使用した場合にのみ価値があります。 –

+1

@ David-W-Fenton:コントロールのデフォルトプロパティはVariant型です。 Excelの類似のコンテキストでは、IsEmpty()を使用して未編集のセルをチェックします。 Accessでは、IsNull()を使用します。あなたのコメントが示唆しているように、OPはそれほど目立つものではありませんでした。 – phoog

1

がtxtErrorComment_5がブランクであるかどうかを検出するために、こののBeforeUpdate(ないのLostFocus)を行うには良い方法は、その値にnull文字列を連結し、組み合わせ式の文字の長さがゼロであるかどうかを参照してください。

Private Sub txtErrorComment_5_LostFocus() 
    If Len(Me.txtErrorComment_5 & vbNullString) = 0 Then 
     MsgBox "Eh..! It cannot be Empty." 
    End If 
End Sub 

あなたはそれだけで一つ以上の空白文字が含まれている場合txtErrorComment_5は空白として扱わたい場合は、トリム()関数が含まれます。

Private Sub txtErrorComment_5_LostFocus() 
    If Len(Trim(Me.txtErrorComment_5) & vbNullString) = 0 Then 
     MsgBox "Eh..! It cannot be Empty." 
    End If 
End Sub 
+0

この手法はかなり冗長です。ヌル文字列と長さゼロの文字列の両方をチェックする必要がある場合は、単純なIsNullOrEmpty()関数を書くことをお勧めします。ただし、既定では、長さがゼロの文字列を許可しないため、通常は組み込みのIsNull()関数が適切です。 – phoog

+0

@phoog Access 2003と2007の両方で、新しいテキストフィールドを作成すると、[ゼロ長さを許可する]プロパティが[はい]になります。その行動を変更する方法がある場合は、共有してください。新しいTextフィールドごとにそのプロパティをNoに変更したくない方がよいでしょう。ありがとう。 – HansUp

+0

奇妙な。おそらく私の記憶は間違っていますか?プロダクション作業のためにAccessテーブルを作成して以来、しばらく経っていますので、私はあまり注意を払っていません。現在使用しているコンピュータにはアクセス権がありません。次回私が行っているコンピュータでそれをチェックしようとします。 – phoog

関連する問題