Office VBA开发经典:中级进阶卷
上QQ阅读APP看书,第一时间看更新

2.7 自动关闭的对话框

VBA中的MsgBox对话框主要有两个作用,一个是在对话框中弹出运行结果,用于告知执行程序的人员;另一个作用是对话框中具有“是”“否”“取消”等可选按钮,让用户抉择。

但是Msgbox对话框一旦弹出来,用户必须与之交互,手工把对话框关掉方可执行后续的程序代码。

在很多情况下,需要用到MsgBox对话框的效果,如果能够在一定时间范围内自动关闭,就更为理想了。

WshShell的Popup方法可以弹出一个对话框,理论上可以在设定的秒数之后自动关闭,但在实际运用中经常不能自动关闭。

因此,更推荐使用API函数来设计自动关闭的对话框。MsgBoxTimeout的完整声明如下。

参数说明如下。

 hwnd:对话框依附的窗口对象的句柄值。

 lpText:对话框中显示的内容。

 lpCaption:对话框的标题。

 wType:对话框显示的按钮、图标风格的组合值。

 wlange:函数扩展。

 dwTimeout:对话框持续的最长毫秒数。

MsgBoxTimeout对话框弹出来后,如果用户主动单击对话框中的按钮,则对话框在设定时间之前就提前关闭,此时该函数返回的整型值与用户所选按钮相关,若置之不理,则对话框在规定时间过后自动关闭,自动关闭了的对话框,其返回值为32000。

下面的程序在对话框中依次弹出一些判断题,用户可以选择“是”或“否”进行作答,如果没来得及单击按钮,则对话框在10秒后自动弹出下一道题。

程序代码如下。

代码分析:hwnd:=0表示该对话框的宿主窗口是计算机的屏幕(屏幕的句柄是0),如果设置为hwnd:=Application.hwnd,则对话框的宿主是Excel应用程序,那么在对话框存续期间用户不能对工作表和单元格进行任何操作,有点类似模态窗体。

运行上述程序,弹出的对话框依次显示单元格中的每道题,如果用户动作慢没有来得及选择,则在B列标记为“未做”,如图2-46所示。

图2-46 指定时间范围内自动关闭的对话框

以上程序的源代码文件为“自动关闭的对话框.xlsm”。