特定のコンボボックスがnullの場合、コードの特定の部分を実行し、データが含まれている場合は別のコンボボックスを実行するifステートメントをコーディングしようとしています。私はこれを書きました:
Private Sub ProjectAddSetDateAutoBtn_Click()
If ProjectAddAllDueDateAutoCmBx = Null Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
データなしでコンボボックスを残すと、ifの最初の部分のコードも、2番目の部分のコードも実行されません!ボックスにデータを入力すると、ifステートメントの2番目の部分が完全に実行されます。エラーはなく、私はこれでかなり困惑しています。 ComboBoxには独自の「Null」がありますか?このifステートメントに問題はありますか?
Nullに等しいものはありません。別のNullもありません 。
IsNull() を使用して、コンボボックスがNullかどうかを確認します。
'If ProjectAddAllDueDateAutoCmBx = Null Then
If IsNull(ProjectAddAllDueDateAutoCmBx) = True Then
受け入れられた答えは完全に正しいですが、私は別のアプローチを使用します:
If HasValue(ProjectAddAllDueDateAutoCmBx) Then
ここで、HasValue関数は次のとおりです。
Public Function HasValue(v As Variant) As Boolean
If Trim(v & "") <> "" Then
HasValue = True
Else
HasValue = False
End If
End Function
これには、NULLと ""(または純粋な空白)の値を同じように処理できるという利点があります。これは、MSAccessコントロールで何倍も必要なことです。たとえば、null値のテキストボックスに値を入力し、それをバックスペースで再度削除すると、NULLではなく ""値になります。ユーザーの観点から、これはほとんど同じであることを意味します。
[(v& "")の部分は、文字列への変換を強制するためのトリックにすぎません。]
Nullが伝播するため、= Null
比較を使用して必要な結果を取得することはできません。この動作を確認するには、次のことを試してください。
? Null = Null
イミディエイトウィンドウにNullが返されることがわかります。期待どおりにtrueまたはfalseを返すIsNull関数を使用します。
Private Sub ProjectAddSetDateAutoBtn_Click()
If IsNull(ProjectAddAllDueDateAutoCmBx) Then
'Code1
Msgbox("ComboBox Is Null")
Else
'Code2
Msgbox("ComboBox Has Data")
End If
End Sub
私は提案します
If IsNull(ProjectAddAllDueDateAutoCmBx.Value) Then
Null
(= Null
ではなくIsNull
)を正しくチェックし、コンボボックスのvalueを明示的にチェックします。
(ほとんどの場合-コンテキストに応じて-コントロールの名前を使用するだけで値が得られますが、明示的にする必要はありません。)
VB=のnullに相当するものはNothingなので、チェックは次のようになります。
If ProjectAddAllDueDateAutoCmBx Is Nothing Then
....
それが役に立てば幸いです。