如何在 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 字符串。