如何在 If/Then 语句中包含多个条件
How to have Multiple Conditions in an If/Then Statement
我正在尝试在 Access 2010 中编写代码,当单击 [Validate] 按钮时,它将分析多个字段(总共 8 个)的值(或没有值),然后 return根据是否输入了所有 8 个字段,另一个字段 ([AppStatus]) 中的语句(或文本)。换句话说,如果任何字段为空,[AppStatus] 字段应填充默认文本 "RE PRE-QUAL"。下面是我开始的地方,但我似乎无法弄清楚为什么它不起作用。
Private Sub Validate_Click()
If [PrimarySSN].Value = Null Then
If [PropAddress].Value = Null Then
If [PropCity].Value = Null Then
If [PropState].Value = Null Then
If [PropZipCode].Value = Null Then
If [RequestedLoanAmount].Value = Null Then
If [BorrowerIncome.Value] = Null Then
If [EstHomeValue].Value = Null Then
[AppStatus].Value = "RE PRE-QUAL"
ElseIf [PrimarySSN].Value = Not Null Then
ElseIf [PropAddress].Value = Not Null Then
ElseIf [PropCity].Value = Not Null Then
ElseIf [PropState].Value = Not Null Then
ElseIf [PropZipCode].Value = Not Null Then
ElseIf [RequestedLoanAmount].Value = Not Null Then
ElseIf [BorrowerIncome].Value = Not Null Then
ElseIf [EstHomeValue].Value = Not Null Then
[AppStatus].Value = Null
End If
End If
End If
End If
End If
End If
End If
End Sub
我认为这就是您所需要的:
If [PrimarySSN].Value = Null Or [PropAddress].Value = Null Or [PropCity].Value = Null Or [PropState].Value = Null Or [PropZipCode].Value = Null Or [RequestedLoanAmount].Value = Null Or [BorrowerIncome.Value] = Null Or [EstHomeValue].Value = Null Then
[AppStatus].Value = "RE PRE-QUAL"
Else
[AppStatus].Value = Null
End If
And also consider this:
它不起作用的原因之一是 Nothing is ever equal to Null, not even another Null。另一个问题是您不能在 VBA 代码中使用 Not Null
。 (Not Null
在 Access SQL 中有效,但这对这里没有帮助。)在 VBA 中,使用 IsNull()
检查值是否为 Null。
只要其他 8 个字段中的一个或多个为空(即IsNull(fieldname.Value) = True
)。否则,AppStatus 将为 Null。所以你可以做这样的事情......
If IsNull(Me.PrimarySSN.Value) _
Or IsNull(Me.PropAddress.Value) _
' additional Or conditions for each of next 5 fields
Or IsNull(Me.EstHomeValue.Value) Then
Me.AppStatus.Value = "RE PRE-QUAL"
Else
Me.AppStatus.Value = Null
End If
然而,当扩展到所有 8 个字段时,这会有点笨拙。
作为替代方案,您可以从控件名称列表开始,将它们加载到数组中,然后使用 For
循环遍历数组检查每个控件值是否为 Null。如果其中任何一个为 Null,则将 AppStatus 设置为 "RE PRE-QUAL" 并跳出循环。
Dim astrFields() As String
Dim strFieldList As String
Dim varAppStatus As Variant
Dim varField As Variant
strFieldList = "PrimarySSN,PropAddress,PropCity,PropState,PropZipCode," & _
"RequestedLoanAmount,BorrowerIncome,EstHomeValue"
astrFields = Split(strFieldList, ",")
varAppStatus = Null
For Each varField In astrFields
'Debug.Print varField
If IsNull(Me.Controls(varField).Value) = True Then
varAppStatus = "RE PRE-QUAL"
Exit For
End If
Next
Me.AppStatus.Value = varAppStatus
注意这种方法可以使维护更容易。如果您需要在应该检查的列表中添加或删除控件,或者更改它们的任何名称,只需编辑 strFieldList 字符串。
我正在尝试在 Access 2010 中编写代码,当单击 [Validate] 按钮时,它将分析多个字段(总共 8 个)的值(或没有值),然后 return根据是否输入了所有 8 个字段,另一个字段 ([AppStatus]) 中的语句(或文本)。换句话说,如果任何字段为空,[AppStatus] 字段应填充默认文本 "RE PRE-QUAL"。下面是我开始的地方,但我似乎无法弄清楚为什么它不起作用。
Private Sub Validate_Click()
If [PrimarySSN].Value = Null Then
If [PropAddress].Value = Null Then
If [PropCity].Value = Null Then
If [PropState].Value = Null Then
If [PropZipCode].Value = Null Then
If [RequestedLoanAmount].Value = Null Then
If [BorrowerIncome.Value] = Null Then
If [EstHomeValue].Value = Null Then
[AppStatus].Value = "RE PRE-QUAL"
ElseIf [PrimarySSN].Value = Not Null Then
ElseIf [PropAddress].Value = Not Null Then
ElseIf [PropCity].Value = Not Null Then
ElseIf [PropState].Value = Not Null Then
ElseIf [PropZipCode].Value = Not Null Then
ElseIf [RequestedLoanAmount].Value = Not Null Then
ElseIf [BorrowerIncome].Value = Not Null Then
ElseIf [EstHomeValue].Value = Not Null Then
[AppStatus].Value = Null
End If
End If
End If
End If
End If
End If
End If
End Sub
我认为这就是您所需要的:
If [PrimarySSN].Value = Null Or [PropAddress].Value = Null Or [PropCity].Value = Null Or [PropState].Value = Null Or [PropZipCode].Value = Null Or [RequestedLoanAmount].Value = Null Or [BorrowerIncome.Value] = Null Or [EstHomeValue].Value = Null Then
[AppStatus].Value = "RE PRE-QUAL"
Else
[AppStatus].Value = Null
End If
And also consider this:
它不起作用的原因之一是 Nothing is ever equal to Null, not even another Null。另一个问题是您不能在 VBA 代码中使用 Not Null
。 (Not Null
在 Access SQL 中有效,但这对这里没有帮助。)在 VBA 中,使用 IsNull()
检查值是否为 Null。
只要其他 8 个字段中的一个或多个为空(即IsNull(fieldname.Value) = True
)。否则,AppStatus 将为 Null。所以你可以做这样的事情......
If IsNull(Me.PrimarySSN.Value) _
Or IsNull(Me.PropAddress.Value) _
' additional Or conditions for each of next 5 fields
Or IsNull(Me.EstHomeValue.Value) Then
Me.AppStatus.Value = "RE PRE-QUAL"
Else
Me.AppStatus.Value = Null
End If
然而,当扩展到所有 8 个字段时,这会有点笨拙。
作为替代方案,您可以从控件名称列表开始,将它们加载到数组中,然后使用 For
循环遍历数组检查每个控件值是否为 Null。如果其中任何一个为 Null,则将 AppStatus 设置为 "RE PRE-QUAL" 并跳出循环。
Dim astrFields() As String
Dim strFieldList As String
Dim varAppStatus As Variant
Dim varField As Variant
strFieldList = "PrimarySSN,PropAddress,PropCity,PropState,PropZipCode," & _
"RequestedLoanAmount,BorrowerIncome,EstHomeValue"
astrFields = Split(strFieldList, ",")
varAppStatus = Null
For Each varField In astrFields
'Debug.Print varField
If IsNull(Me.Controls(varField).Value) = True Then
varAppStatus = "RE PRE-QUAL"
Exit For
End If
Next
Me.AppStatus.Value = varAppStatus
注意这种方法可以使维护更容易。如果您需要在应该检查的列表中添加或删除控件,或者更改它们的任何名称,只需编辑 strFieldList 字符串。