在Access Form上使用跳过逻辑的最佳方法?

时间:2014-04-07 13:58:29

标签: forms vba ms-access access-vba

我正在MS Access表单上尝试跳过逻辑,并希望获得有关最佳控件的建议。令人惊讶的是,我没有找到与此有关的线程。

因此,背景:使用MS Access 2013为用户问卷构建一个简单的表单。我们不允许在我们的表单上使用空格,并且有一个模块可以检查空白,并且在完成所有必填字段之前不允许用户进入下一部分。相反,我们要求用户输入“-99”,如果他们绝对无法回答问题

我写的跳过逻辑指出,如果Q1和Q2的答案都不是= 0,那么他们可以选择跳过接下来的几个问题。我在选项中写了一个y / n MsgBox,在Q2回答后弹出。请参阅下面的代码。问题是我已经可以预见到我选择的事件会出现问题。如果他们对Q1回答是,对Q2没有回答(没有弹出窗口)然后返回并将他们的答案改为Q1。我的表单上有Tab键顺序,但这并不妨碍用户跳过它们。

所以我的问题简而言之,实现跳过逻辑的最佳方法是什么,取决于两个字段的答案?

Private Sub Q2_AfterUpdate()
On Error GoTo Error_Trap

If (IsNull(Me.CSSRSsi1) Or IsNull(Me.CSSRSsi1)) Then
Exit Sub
Else:

If (Me.Q1 = 0 And Me.Q2 = 0) Then

If MsgBox("Answers to Question 1 and 2 are both 'No'" & vbNewLine _
    & "Proceed to Q5?", vbYesNo) = vbNo Then
    DoCmd.GoToControl "Q3"
Else:
Me.Q3 = -99
Me.Q4 = -99
DoCmd.GoToControl "Q5"
End If

End If
End If

Q2_Exit:
Exit Sub

Error_Trap:
MsgBox Error$
Resume Q2_Exit

End Sub

更新:当Remou带领我时,我在第一季度和第二季度添加了一个检查程序,以确保在继续执行我的跳过逻辑代码之前已经回答了它们。对于Q1和Q2,这被称为AfterUpdate。

1 个答案:

答案 0 :(得分:1)

更新之后是正确的事件,但您应该从事件中调用该过程,例如

 Sub IsThisOkay()
    ''Various checks
    ''If it is okay, Q3 & Q4 = -99
    ''Else Q3 & Q4 = Null
 End Sub

 Private Sub Q1_AfterUpdate()
    IsThisOkay
 End Sub

 Private Sub Q2_AfterUpdate()
    IsThisOkay
 End Sub

您需要从Q1和Q2调用该程序,以防有人更改某些内容。如果两个答案与您的标准不符,您将需要删除Q3和Q4。