官术网_书友最值得收藏!

2.7 自動(dòng)關(guān)閉的對(duì)話框

VBA中的MsgBox對(duì)話框主要有兩個(gè)作用,一個(gè)是在對(duì)話框中彈出運(yùn)行結(jié)果,用于告知執(zhí)行程序的人員;另一個(gè)作用是對(duì)話框中具有“是”“否”“取消”等可選按鈕,讓用戶抉擇。

但是Msgbox對(duì)話框一旦彈出來(lái),用戶必須與之交互,手工把對(duì)話框關(guān)掉方可執(zhí)行后續(xù)的程序代碼。

在很多情況下,需要用到MsgBox對(duì)話框的效果,如果能夠在一定時(shí)間范圍內(nèi)自動(dòng)關(guān)閉,就更為理想了。

WshShell的Popup方法可以彈出一個(gè)對(duì)話框,理論上可以在設(shè)定的秒數(shù)之后自動(dòng)關(guān)閉,但在實(shí)際運(yùn)用中經(jīng)常不能自動(dòng)關(guān)閉。

因此,更推薦使用API函數(shù)來(lái)設(shè)計(jì)自動(dòng)關(guān)閉的對(duì)話框。MsgBoxTimeout的完整聲明如下。

參數(shù)說(shuō)明如下。

 hwnd:對(duì)話框依附的窗口對(duì)象的句柄值。

 lpText:對(duì)話框中顯示的內(nèi)容。

 lpCaption:對(duì)話框的標(biāo)題。

 wType:對(duì)話框顯示的按鈕、圖標(biāo)風(fēng)格的組合值。

 wlange:函數(shù)擴(kuò)展。

 dwTimeout:對(duì)話框持續(xù)的最長(zhǎng)毫秒數(shù)。

MsgBoxTimeout對(duì)話框彈出來(lái)后,如果用戶主動(dòng)單擊對(duì)話框中的按鈕,則對(duì)話框在設(shè)定時(shí)間之前就提前關(guān)閉,此時(shí)該函數(shù)返回的整型值與用戶所選按鈕相關(guān),若置之不理,則對(duì)話框在規(guī)定時(shí)間過(guò)后自動(dòng)關(guān)閉,自動(dòng)關(guān)閉了的對(duì)話框,其返回值為32000。

下面的程序在對(duì)話框中依次彈出一些判斷題,用戶可以選擇“是”或“否”進(jìn)行作答,如果沒(méi)來(lái)得及單擊按鈕,則對(duì)話框在10秒后自動(dòng)彈出下一道題。

程序代碼如下。

代碼分析:hwnd:=0表示該對(duì)話框的宿主窗口是計(jì)算機(jī)的屏幕(屏幕的句柄是0),如果設(shè)置為hwnd:=Application.hwnd,則對(duì)話框的宿主是Excel應(yīng)用程序,那么在對(duì)話框存續(xù)期間用戶不能對(duì)工作表和單元格進(jìn)行任何操作,有點(diǎn)類似模態(tài)窗體。

運(yùn)行上述程序,彈出的對(duì)話框依次顯示單元格中的每道題,如果用戶動(dòng)作慢沒(méi)有來(lái)得及選擇,則在B列標(biāo)記為“未做”,如圖2-46所示。

圖2-46 指定時(shí)間范圍內(nèi)自動(dòng)關(guān)閉的對(duì)話框

以上程序的源代碼文件為“自動(dòng)關(guān)閉的對(duì)話框.xlsm”。

主站蜘蛛池模板: 灌阳县| 漾濞| 丽江市| 垣曲县| 晋江市| 社旗县| 绵阳市| 泸西县| 博白县| 大方县| 县级市| 叶城县| 德令哈市| 万山特区| 和平区| 科技| 连平县| 常山县| 南涧| 彰武县| 古浪县| 十堰市| 沽源县| 香格里拉县| 清水县| 周宁县| 习水县| 宁国市| 固原市| 聊城市| 广南县| 肃北| 万年县| 蓝田县| 濮阳县| 甘孜县| 疏附县| 阳城县| 池州市| 泗阳县| 浦江县|