检查访问表单字段是否为空,如果不为空,则调用添加功能

时间:2014-02-21 00:45:21

标签: vba ms-access access-vba

我有这个简单的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

有人看到我完全离开了哪里吗?

2 个答案:

答案 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

如果您学会正确地缩进代码以便在视觉上匹配IfEnd 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