2014-04-07 58 views
2

我正在MS Access表單上跳過邏輯的實驗,並希望就最佳控制措施提出建議。令人驚訝的是,我沒有找到與此有關的線索。在Access窗體上使用跳過邏輯的最佳方法是什麼?

所以,背景:使用MS Access 2013爲用戶調查問卷構建簡單表單。我們不允許我們的表單上有空格,並且有一個模塊可以檢查空格,並且不會讓用戶在填寫所有必填字段之前繼續下一部分。相反,如果用戶絕對不能回答「-99」,則要求用戶輸入「-99」題。

我寫的跳過邏輯表明,如果Q1和Q2的答案都是no = 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。

+0

您是否考慮過在更新q1或q2時調用的過程? – Fionnuala

+0

告訴我更多你在想什麼。我不希望MsgBx讓他們跳過多次彈出選項,它只應在兩個Q被填充後觸發......這實際上使我想我可以添加代碼來檢查Q1和Q2在MsgBox打開之前填充。讓我嘗試一下...... – TSS

+0

準確地說,使用一個包含幾個IF的例程,可以在任何一個或更新問題時調用它們。 – Fionnuala

回答

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。

+0

很好的建議,謝謝!是的,如果第一季度和第二季度發生變化,我已經建立了迴避空白的問題。希望這個線程可以幫助別人 – TSS

相關問題