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,这对我有很大帮助! 哇!您也可以巧妙地处理关闭事件。创建一个处理验证并返回True
或False
的私有函数,然后从不同的表单事件中调用该函数,以便始终发出有用的警告。抱歉,我无法提供更多详细信息,但我现在还不能带着信心粗略地编写代码。
这个主意不错,我看看我能不能实现!再次感谢:)以上是关于VBA 防止用户输入表单中出现空字段的主要内容,如果未能解决你的问题,请参考以下文章