我有这个简单的Access Form,当你填写表单并忘记填写业务单位字段时,会弹出一个msgBox告诉你,并将setFocus弹出到那个组合框。如果它不为null,我想调用下一个功能。这段代码的第一部分可以工作,但是当它不是Null时它将无法继续。
Private Sub Image_AddNon_RPS_Button_Click()
If IsNull(Me.BU_Selected_Add) Then
MsgBox "Please Select a Business Unit!", vbOKOnly
Exit Sub
End If
Me.Combo_BU_Selector.SetFocus
Exit Sub
If Not IsNull(Me.BU_Selected_Add) Then
Call Add_RPS_LINE
End If
End Sub
有人看到我完全离开了哪里吗?
答案 0 :(得分:6)
您还有一个额外的Exit Sub
(第一个MsgBox
之后的那个)阻止您的代码执行您想要的操作。此外,您的第一个End If
位于错误的位置。
尝试这样的事情:
Private Sub Image_AddNon_RPS_Button_Click()
If IsNull(Me.BU_Selected_Add) Then ' No business unit
MsgBox "Please Select a Business Unit!", vbOKOnly ' Tell user
Me.Combo_BU_Selector.SetFocus ' Focus the control
Exit Sub ' Exit the method
End If ' End the IsNull test
Call Add_RPS_LINE ' You only get here if the above doesn't execute
End Sub
如果您学会正确地缩进代码以便在视觉上匹配If
和End If
,这会有所帮助,因此您可以看到它们在哪里排列(匹配)以及它们不在哪里。 : - )
答案 1 :(得分:0)
如果您将代码缩进更正为:
Private Sub Image_AddNon_RPS_Button_Click()
If IsNull(Me.BU_Selected_Add) Then
MsgBox "Please Select a Business Unit!", vbOKOnly
Exit Sub
End If
Me.Combo_BU_Selector.SetFocus
Exit Sub
If Not IsNull(Me.BU_Selected_Add) Then
Call Add_RPS_LINE
End If
End Sub
您可以清楚地看到中间的Exit Sub
会在函数到达Call Add_RPS_LINE
之前终止该函数。
如果你看一下你所拥有的两个If
语句,你可以看到它们几乎相同,因此Else
是有序的,从而产生了这种更简单,更易读的代码。
Private Sub Image_AddNon_RPS_Button_Click()
If IsNull(Me.BU_Selected_Add) Then
MsgBox "Please Select a Business Unit!", vbOKOnly
Me.Combo_BU_Selector.SetFocus
Else
Call Add_RPS_LINE
End If
End Sub