访问 VBA 防止在关闭时输入表单记录

Posted

技术标签:

【中文标题】访问 VBA 防止在关闭时输入表单记录【英文标题】:Access VBA Preventing form record entry on close 【发布时间】:2020-09-16 15:05:36 【问题描述】:

我正在使用 Access 数据库 VBA。

我注意到如果用户填写了一些文本框,然后单击窗口关闭按钮,表单会将其记录到记录中。

我想知道防止表单在关闭时输入未完成记录的最佳方法是什么?

有几个网站指向在 beforeupdate 函数中放置代码。

这是我尝试过的。

Private Sub frmRecLog_BeforeUpdate(Cancel As Integer)


DoCmd.SetWarnings False
Me.Undo

Cancel = True

Exit Sub

End Sub

这段代码对我根本不起作用。我尽力了,哈哈。

任何帮助。

【问题讨论】:

什么剂量不适合你?它总是会丢弃您的更改。所以你需要一个保存按钮来保存,否则它会提示保存或丢弃。 最好在程序结束时重新打开警告。代码不知道记录是完整的还是不完整的。需要验证数据 - 检查每个控件是否有数据 - 并采取相应措施。 可以禁用 X 关闭和编码按钮控件以管理行为。 【参考方案1】:

所以,您需要插入一个命令按钮Save。如果用户没有点击Save,那么它不会保存任何记录。他们将收到未保存数据的警告。您需要声明一个私有布尔变量并编写代码来保存和警告。所以完整的代码如下所示。

Option Compare Database
Option Explicit
Private blnSaveRecord As Boolean

Private Sub cmdSave_Click()
    blnSaveRecord = True
    DoCmd.RunCommand (acCmdSaveRecord)
    blnSaveRecord = False
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
 
    If Not blnSaveRecord Then
        Cancel = True
        strMsg = "Please save the record.," & _
                 vbNewLine & "or press ESC from keyboard to cancel the operation."
        Call MsgBox(strMsg, vbInformation, "Save Record")
        'Me.Undo 'You can set undo option here if you do not want to press ESC.
    End If
    
End Sub

【讨论】:

以上是关于访问 VBA 防止在关闭时输入表单记录的主要内容,如果未能解决你的问题,请参考以下文章

防止 Word VBA 中的 Excel 提示

访问问题关闭记录不完整的表格

VBA 多文本框验证控件

关闭 Access 时防止打开表单的“保存设计更改”

Access 2007 拆分表单 VBA:打开时 acNewRec 可防止在表单中跳动 - 就像第一个字段未“选择”一样

防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]