我需要确保我的用户输入的停机时间不会超过可用时间。为此,我计算了他们可用的时间,并在表单中创建了一个运行总计列,以显示他们当前的停机时间(他们输入一个停机时间原因和#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
答案 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