VBA 防止用户输入表单中出现空字段

Posted

技术标签:

【中文标题】VBA 防止用户输入表单中出现空字段【英文标题】:VBA to prevent empty fields in a user-entry form 【发布时间】:2014-09-15 18:38:17 【问题描述】:

我在使用 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

这是我的“添加记录”按钮的代码:

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】:

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

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

   Me.cboLookup.SetFocus
   Cancel = True

End If

【讨论】:

嗯,它仍然把我踢出表单而不保存它。它会告诉我哪些字段需要回复,一旦我点击“确定”,它就会再次显示给我。第二次单击“确定”将我踢出表格。我的“添加记录”代码会覆盖我的更新前代码并继续关闭表单吗? 如果禁用“添加记录”按钮并让表单按设计设置记录(在关闭表单或移动到另一条记录时保存)怎么办?至少用于测试。一切都更好了吗? 实际上效果更好一些!我最初禁用了控制框,以免混淆用户,并将其替换为自定义“关闭按钮”,通知记录已以某种方式更改并询问用户是否要保存它。但是,仅使用实际的关闭框退出会通知用户此时无法保存记录,并提示输入是/否以退出。这基本上实现了我的两个自定义按钮应该做的事情。谢谢 Smandoli,这对我有很大帮助! 哇!您也可以巧妙地处理关闭事件。创建一个处理验证并返回TrueFalse 的私有函数,然后从不同的表单事件中调用该函数,以便始终发出有用的警告。抱歉,我无法提供更多详细信息,但我现在还不能带着信心粗略地编写代码。 这个主意不错,我看看我能不能实现!再次感谢:)

以上是关于VBA 防止用户输入表单中出现空字段的主要内容,如果未能解决你的问题,请参考以下文章

防止用户在表单中输入 URL

防止表单提交字段输入键keydown? [复制]

防止用户在字段中输入错误信息时清除字段中的信息。

防止 Word VBA 中的 Excel 提示

在用户将数据输入字段之前如何防止验证?

VBA 多文本框验证控件