使用上一个条目来计算MS Access vba

时间:2018-05-15 18:29:29

标签: vba ms-access access-vba

我需要确保我的用户输入的停机时间不会超过可用时间。为此,我计算了他们可用的时间,并在表单中创建了一个运行总计列,以显示他们当前的停机时间(他们输入一个停机时间原因和#34;分钟下来"一次)。

现在我正在尝试编写一个VBA代码,用于检查可用时间与运行的停机总时间之间的关系。它适用于第一个条目除外。如果用户在第一次输入时输入的数字高于可用时间,则允许该数字。我以为是因为我在使用"更新后#34;但我尝试了其他事件并没有改变结果。

这是我目前的VBA代码:

Private Sub Form_AfterUpdate()
    If Me.RunTime.Value < Me.DTSum Then
        MsgBox ("You have too much downtime")
        DoCmd.RunCommand acCmdDeleteRecord
        DoCmd.RunCommand acCmdRecordsGoToPrevious 
    Else
        MsgBox ("Okay")
    End If
End Sub

1 个答案:

答案 0 :(得分:2)

考虑使用BeforeUpdate触发事件(通常是数据验证事件),您可以在输入后和保存之前警告用户,然后相应地取消事件。对于新事件,请使用BeforeInsert触发事件。

通过这种方法,您可以避免删除操作并采取主动立场而不是被动的立场。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.RunTime.Value < Me.DTSum Then
        MsgBox ("You have too much downtime")
        Cancel = True
        Me!RunTime.Undo
    Else
        MsgBox ("Okay")
    End If
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
    If Me.RunTime.Value < Me.DTSum Then
        MsgBox ("You have too much downtime")
        Cancel = True
        Me!RunTime.Undo
    Else
        MsgBox ("Okay")
    End If
End Sub

或者使用DRY-er解决方案的功能:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Cancel = CheckRunTime
    Me!RunTime.Undo
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
    Cancel = CheckRunTime
    Me!RunTime.Undo
End Sub

Function CheckRunTime As Integer
    Dim Cancel As Integer

    If Me.RunTime.Value < Me.DTSum Then
        MsgBox ("You have too much downtime")
        Cancel = True
    Else
        MsgBox ("Okay")
        Cancel = False
    End If

    CheckRunTime = Cancel
End Sub