Private Sub userform_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = 1
常数 | 值 | 描述 |
vbFormControlMenu | 0 | 用户在 UserForm.上选择“控制”菜单中的“关闭”命令。 |
VbFormCode | 1 | 由代码调用 Unload 语句。 |
vbAppWindows | 2 | 正在结束当前 Windows 操作环境的过程。(仅用于Visual Basic 5.0 。) |
vbAppTaskManager | 3 | Windows 的“任务管理器”正在关闭这个应用。(仅用于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等动作都不能算作关闭窗体,也不会被此事件所捕获。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。