分享

Excel QueryClose事件的疑问,CloseMode <> 1 Then Cancel = 1

 lwc5577 2020-06-09
Private Sub userform_QueryClose(Cancel As Integer, CloseMode As Integer)
         If CloseMode <> 1 Then Cancel = 1
常数描述
vbFormControlMenu0用户在 UserForm.上选择“控制”菜单中的“关闭”命令。
VbFormCode1由代码调用 Unload 语句。
vbAppWindows2正在结束当前 Windows 操作环境的过程。(仅用于Visual Basic 5.0 。)
vbAppTaskManager3Windows 的“任务管理器”正在关闭这个应用。(仅用于Visual Basic 5.0 。)


我看了help后,觉得 完全可以设置成          If CloseMode < 0 Then Cancel = 1  来阻止所有的关闭窗体的情况
但是没有人这样做,而且我按照 If CloseMode <0 Then Cancel = 1  执行也没有达到我想的结果,请问这是为什么呢?  明明< 0了应该可以阻止所有的情况啊~


另外还有一个问题Cancel 等于true允许关闭,等于flase不允许关闭,是这样吗?CloseMode <> 1 表示不是通过 VBA 代码的 Unload 命令来关闭窗口的。因为通常不希望用户使用右上角的“X”、或者使用“控制”菜单中的“关闭”命令、或者是关闭应用程序(比如 Excel)、或者是通过“任务管理器”来关闭自定义的窗口,所以才使用这句代码。

Cancel = 1 就表示 Cancel = True,即不响应用户关闭窗口的命令。而 Cancel = 0 表示 Cancel = False,即表示响应用户的关闭窗口命令。那么,照此想来,closemode应该有多种值了……
0是手动单击关闭按钮关闭窗体;
1是代码中用unload卸载窗体……
其他呢?
常数                               值              描述
vbFormControlMenu       0               用户在 UserForm.上选择“控制”菜单中的“关闭”命令。
VbFormCode                   1               由代码调用 Unload 语句。
vbAppWindows               2              正在结束当前 Windows 操作环境的过程。(仅用于Visual Basic 5.0 。)
vbAppTaskManager         3              Windows 的“任务管理器”正在关闭这个应用。(仅用于Visual Basic 5.0 。)

Q:在VBA中,关闭用户窗体的方式有哪些?
A:在UserForm的事件中,UserForm_QueryClose事件可以捕获窗体关闭的动作,其中的参数CloseMode表示了关闭窗体的不同方式。
如果使用窗体右上角的“关闭按钮”来关闭窗体,CloseMode属性为vbFormControlMenu,值为0;
如果使用程序代码Unload来关闭窗体,则CloseMode属性为vbFormCode,值为1。
除此以外,CloseMode属性为vbAppWindows 表示正在结束当前 Windows 操作环境的过程,属性为vbAppTaskManager 表示“任务管理器”正在关闭这个应用。但这两个仅适用于Visual Basic 5.0 。
其他的例如Hide等动作都不能算作关闭窗体,也不会被此事件所捕获。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多