本文轉(zhuǎn)自:http://www.vbafan.com/2010/06/24/undocumented-api-messageboxtimeout-vba/
大家都知道,VBA中自帶的MsgBox不能自動關(guān)閉,某些特殊情況下需要在指定時間內(nèi)用戶沒有點擊消息框按鈕后能繼續(xù)運行代碼,需要用到定時關(guān)閉的消息框,之前的方法是使用Wscript.Shell的Popup方法,或者自定義窗體。
EH的ldy兄推薦了一個未公開的API可以實現(xiàn)定時關(guān)閉消息框,感覺十分有用。稍作修改,將wType參數(shù)改成可以提示輸入VBA的vbMsgboxStyle常數(shù)。
這個API函數(shù)的參數(shù)如下:
- hwnd:窗口句柄,可以設(shè)為0
- lpText:消息框顯示內(nèi)容,類似于MsgBox函數(shù)的第一個參數(shù)Prompt
- lpCaption:消息框標(biāo)題,類似于MsgBox函數(shù)的第三個參數(shù)Caption
- wType:消息框類型,類似于MsgBox函數(shù)的第二個參數(shù)Buttons
- wlange:不是太明白這個參數(shù),0或者1都看不出什么差別
- dwTimeout:延時時間,單位是毫秒
返回的值和vbMsgBoxResult常數(shù)一樣,多了一個返回值32000表示超過延時時間未選擇任何按鈕。
Private Declare Function MsgBoxEx Lib "user32" Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, _
ByVal wlange As Long, _
ByVal dwTimeout As Long) As Long
Private Sub TestMsgboxEx()
Dim ret As Long
ret = MsgBoxEx(0, "請選擇", "兩秒后自動關(guān)閉", vbYesNo + vbInformation, 1, 2000)
If ret = 32000 Then
Debug.Print "超時關(guān)閉"
ElseIf ret = vbYes Then
Debug.Print "選擇Yes"
ElseIf ret = vbNo Then
Debug.Print "選擇No"
End If
End Sub