【发布时间】: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 ResponseAND 与一个 true,意味着取消将与 AND 的另一侧相同。TRUE and today=Wednesday,例如只需要查看日期。看看你的 if,这似乎不合逻辑,你设置了 Cancel,尝试,然后基于 msgbox 决定。在结束子之前,只需输入cancel=response=vbYes或您想要的任何方式 -
这是一段奇怪的代码。当然它总是显示消息框,你在那个子中做的第一件事就是显示消息框并将它的结果分配给
Response。这没有嵌套在If语句中。Cancel = True And Response这行到底应该做什么?你有Option Explicit吗? -
您好,Erik..我刚刚开始自学 VBA,请耐心等待。如果满足条件,您所指的行应该取消卸载并弹出消息框。在我定义响应之前工作正常。我不知道“选项显式”是什么。检查 msgbox 响应的正确方法是什么?