【问题标题】:How to have Multiple Conditions in an If/Then Statement如何在 If/Then 语句中包含多个条件
【发布时间】:2015-09-04 08:08:42
【问题描述】:

我正在尝试在 Access 2010 中编写代码,当单击 [Validate] 按钮时,它将分析多个字段(总共 8 个)的值(或无值),然后返回语句(或文本)根据是否输入了所有 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

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

    它不起作用的原因之一是Nothing is ever equal to Null, not even another Null。另一个问题是您不能在 VBA 代码中使用 Not Null。 (Not Null 在 Access SQL 中有效,但在这里没有帮助。)在 VBA 中,使用 IsNull() 检查值是否为 Null。

    只要其他 8 个字段中的一个或多个为 Null(即IsNull(fieldname.Value) = True),您就希望 "RE PRE-QUAL" 作为 AppStatus 的值。否则,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 字符串。

    【讨论】:

    • 做到了...谢谢HansUp!有没有办法在不单击按钮的情况下完成此操作,并在表单关闭时自动运行?我尝试将您在上面提供的相同代码应用于表单的 On Close 函数,但它返回错误“您无法为该对象分配值”。当我调试它时,它会突出显示代码的 Else Me.AppStatus.Value = Null 部分。
    • 您不能依赖在表单的 On Close 事件期间可用的控件。请考虑 On Unload。或者将代码放在一个单独的过程中,并从确定 AppStatus.Value 的每个字段的 After Update 事件中调用它。
    【解决方案2】:

    我认为这是你需要的:

    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:

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2019-10-20
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多