Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數據處理軟件。 了解 VBA 的朋友們都知道,VBA 中自帶的 MsgBox 不能自動關閉,需要用戶做出交互后才能關閉。但是在某些特定情況下,我們需要 Msgbox 在指定時間內沒有用戶操作的情況下自動關閉,然后繼續運行代碼。一般采取的方法是使用Wscript.Shell 的 Popup 方法,或者自定義窗體, 或者采用 SetTimer 等來實現。這里推薦一個未公開的 API 函數—— MessageBoxTimeout 實現定時關閉消息框,感覺十分有用, 這里為了方便我們把它的名稱聲明為 MsgBoxTimeout,將 wType 聲明為 VbMsgBoxStyle。 
函數的聲明如下(32位): Private Declare Function MsgBoxTimeout 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 此函數的參數如下: ?hwnd:消息框擁有者窗口的句柄,可以設為 0 ?lpText:消息框顯示內容,類似于 MsgBox 函數的第一個參數 Prompt ?lpCaption:消息框標題,類似于 MsgBox 函數的第三個參數 Caption ?wType:消息框類型,類似于 MsgBox 函數的第二個參數 Buttons ?wlange:函數擴展,一般取 0 ?dwTimeout:消息框延遲關閉時間,單位為毫秒 返回的值和 vbMsgBoxResult 常數一樣,多了一個返回值 32000 表示超過延時時間未選擇任何按鈕。 具體例子見附件: 點擊鏈接從百度網盤下載 示例代碼如下: ? '**************************************** '---此模塊演示一個可以延時關閉的消息框--- '**************************************** #If Win64 Then '64位 Private Declare PtrSafe Function MsgBoxTimeout _ Lib "user32" _ Alias "MessageBoxTimeoutA" ( _ ByVal hwnd As LongPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal wType As VbMsgBoxStyle, _ ByVal wlange As Long, _ ByVal dwTimeout As Long) _ As Long #Else Private Declare Function MsgBoxTimeout _ 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 #End If
Sub btnMsgbox_Click() Dim xRet As Long xRet = MsgBoxTimeout(0, "此對話框如無交互操作將在 2 秒后自動關閉", "ExcelFans.com", vbYesNo + vbInformation, 1, 2000) Select Case xRet Case 32000 Debug.Print "超時自動關閉" Case vbYes Debug.Print "選擇""是""按鈕" Case vbNo Debug.Print "選擇""否""按鈕" End Select End Sub
Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |