VBA用于防止用户输入表单中的空字段

时间:2014-09-15 18:38:17

标签: vba ms-access access-vba ms-access-2010

我遇到了VBA编码问题,我用它来检查弹出窗体中的空白字段。代码应该检查表单上的空白字段,如果有空白表单则通知用户,如果没有,则添加记录。我有第二个函数保存记录,然后关闭表单。下面是我用来检查空白的代码:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim ctrl As Control
Dim strMsg As String

For Each ctrl In Me.Controls

    If ctrl.Tag = "BlkChk" Then
        If IsNull(ctrl) Then
           strMsg = strMsg & "- " & ctrl.Name & vbCrLf
        End If
    End If

Next ctrl

If strMsg <> "" Then
    If vbOK = MsgBox("The following fields require a response:" & vbCrLf & vbCrLf & _
       strMsg & vbCrLf & vbCrLf, _
       vbOKOnly) Then
       Cancel = True

       Me.cboLookup.SetFocus
    End If

End If

End Sub

以下是我添加记录的代码&#39;按钮:

Private Sub cmdAddRecord_Click()
On Error GoTo cmdAddRecord_Click_Err

    DoCmd.Save
    DoCmd.Close , ""

cmdAddRecord_Click_Exit:
    Exit Sub

cmdAddRecord_Click_Err:
    MsgBox Error$
    Resume cmdAddRecord_Click_Exit

End Sub

第一段代码工作正常,但是当我点击我的“添加记录”时按钮,并执行我的第二位代码,它将通知用户两次,然后关闭表单而不保存,无论是否填写所有空白。我在网上经历了几个关于其他人如何设置它以确定我是否可以实现他们的想法的例子,但它并不适合我。我认为这可能与“添加记录”有关。代码,但我似乎无法弄明白。我该如何处理这个问题?我应该重构我的编码还是应该将它们全部组合到一个On_Click()命令中?

1 个答案:

答案 0 :(得分:1)

您没有正确使用MsgBox()方法。试试这个:

If strMsg <> "" Then
   MsgBox "The following fields require a response:" & vbCrLf & vbCrLf & _
       strMsg & vbCrLf & vbCrLf, vbOKOnly

   Me.cboLookup.SetFocus
   Cancel = True

End If