首页officeexcel正文

Excel VBA 中定时关闭的 MsgBox 一个未公开的API

强国说学习2023-04-20109ExcelVBA定时关闭MsgBox一个公开

了解 VBA 的朋友们都知道,VBA 中自带的 MsgBox 不能自动关闭,需要用户做出交互后才能关闭。但是在某些特定情况下,我们需要 Msgbox 在指定时间内没有用户操作的情况下自动关闭,然后继续运行代码。一般采取的方法是使用Wscript.Shell 的 Popup 方法,或者自定义窗体, 或者采用 SetTimer 等来实现。这里推荐一个未公开的 API 函数—— MessageBoxTimeout 实现定时关闭消息框,感觉十分有用, 这里为了方便我们把它的名称声明为 MsgBoxTimeout,将 wType 声明为 VbMsgBoxStyle。

函数的声明如下(32位):

由WPS之家(wps.qiangguoshuo.com)收集的该篇文章内容来源于网络,希望能为您提供帮助。

Private Declare Function MsgBoxTimeoutLib "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#ElsePrivate 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 IfSub btnMsgbox_Click()Dim xRet As LongxRet = MsgBoxTimeout(0, "此对话框如无交互操作将在 2 秒后自动关闭", "ExcelFans.com", vbYesNo + vbInformation, 1, 2000)Select Case xRetCase 32000Debug.Print "超时自动关闭"Case vbYesDebug.Print "选择""是""按钮"Case vbNoDebug.Print "选择""否""按钮"End SelectEnd Sub

如想转载该文章请注明出处:强国说学习-qiangguoshuo.com
强国说学习

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://www.qiangguoshuo.com/excel/73062.html