MsgBox 确认退出 Access 中的表单

Posted

技术标签:

【中文标题】MsgBox 确认退出 Access 中的表单【英文标题】:MsgBox to confirm exit from form in Access 【发布时间】:2017-08-23 10:10:45 【问题描述】:

我有一个包含合同详细信息的记录表和一个我在其中输入一些附加信息的子表。主窗体有一个命令按钮来关闭它。

我需要在关闭时检查 2 个控件(一个在主窗体中,一个在子窗体中),如果满足某些条件,则应该出现 Yes/No MsgBox。如果用户按“是”,表单将关闭,如果用户按“否”,表单将保持打开状态。

到目前为止,我有这个:

Private Sub Form_Unload(Cancel As Integer)
Dim Response As Integer

Response = MsgBox("It looks like this contract is fixed. Would you like to edit the final price?", vbYesNo, "Database Information")

If Me![fixed price] = 0 And Me![Fixation Orders Subform1].Form!Text38 = "Final Fixed Price" Then
    Cancel = True And Response
        If Response = vbYes Then
            Cancel = True
         Else
            Cancel = False
         End If

Else
    Cancel = False
End If

End Sub

问题:在我定义“响应”之前,MsgBox 显示正确,但表单仍然关闭。在我定义它以在第二个“如果”中使用它之后:

    无论如何都会出现消息框 按“是”或“否”关闭表单

另外,在我解决了这个问题之后,当我去下一条记录时,我应该把这段代码放在哪个事件上来检查条件?提前致谢。

【问题讨论】:

也许 Cancel = Response=vbYes 而不是 Cancel = True And Response AND 与一个 true,意味着取消将与 AND 的另一侧相同。 TRUE and today=Wednesday,例如只需要查看日期。看看你的 if,这似乎不合逻辑,你设置了 Cancel,尝试,然后基于 msgbox 决定。在结束子之前,只需输入cancel=response=vbYes 或您想要的任何方式 这是一段奇怪的代码。当然它总是显示消息框,你在那个子中做的第一件事就是显示消息框并将它的结果分配给Response。这没有嵌套在 If 语句中。 Cancel = True And Response 这行到底应该做什么?你有Option Explicit 吗? 您好,Erik..我刚刚开始自学 VBA,请耐心等待。如果满足条件,您所指的行应该取消卸载并弹出消息框。在我定义响应之前工作正常。我不知道“选项显式”是什么。检查 msgbox 响应的正确方法是什么? 谢尔盖提供的答案是正确的。如果您想继续 VBA 开发,您可以阅读 Option Explicit here,this page 快速解释您为什么要使用它。如果您遇到问题,打开Option Explicit 通常会有所帮助。 【参考方案1】:

我认为应该是这样的:

Private Sub Form_Unload(Cancel As Integer)
If Me![fixed price] = 0 And Me![Fixation Orders Subform1].Form!Text38 = "Final Fixed Price" Then
    If MsgBox("It looks like this contract is fixed. Would you like to edit the final price?", vbYesNo, "Database Information") = vbYes Then
        Cancel = True
    End If
End If
End Sub

【讨论】:

非常感谢您的回复。消息框现在正确显示,但表单仍然关闭。不过,进步:) 编辑:问题已解决。当我正常关闭表单时,您的代码运行良好,但是当我使用命令按钮(带有“关闭窗口”宏“)时,无论响应如何都关闭。我将您的代码放在按钮的 OnClick 事件上,并将 Cancel=true 替换为DoCmd.Close。再次感谢您的宝贵时间。

以上是关于MsgBox 确认退出 Access 中的表单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用表单根据 msgbox 上输入的内容导航到特定查询?

程序完成时通知用户

MS Access -> Excel MsgBox 出现两次

Access VBA:更改子表单的记录源

在表单应用程序中,是不是有任何替代 MsgBox 的方法?

在表单面板的中心显示 msgbox