本文作者:office教程网

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

office教程网 2023-05-27 17:35:54
后台-系统设置-扩展变量-手机广告位-内容正文顶部
摘要: 了解 VBA 的朋友们都知道,VBA 中自带的 MsgBox 不能自动关闭,需要用户做出交互后才能关闭。但是在某些特定情况下,我们需要 Msgbox 在指定时间内没有用户操作的情况...

了解 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 表示超过延时时间未选择任何按钮。

Excel VBA 操作注册表的模块 实现代码

VBA自带的注册表操作功能很弱,只能操作固定的键,很是不方便。这里收集了一个在VBA中操作注册表的模块,我对模块进行了一定的修改,使它可以用在64位的Office上面。ExcelVBA操作注册

具体例子见附件:

点击链接从百度网盘下载

示例代码如下:

 

'****************************************
'---此模块演示一个可以延时关闭的消息框---
'****************************************
#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 VBA 中定时关闭的 MsgBox 一个未公开的API的下载地址:
  • 本地下载

  • Excel VBA 窗体之去除窗体标题栏 实现代码

    在VBA中当我们有时需要显示一个无标题栏的窗体作为启动的界面,但是VBA的窗体不可以直接设置这样的属性,只有通过代码来实现附件下载:点击链接从百度网盘下载操作如下:◾在Excel的

    后台-系统设置-扩展变量-手机广告位-内容正文底部
    未经允许不得转载:

    作者:office教程网,原文地址:Excel VBA 中定时关闭的 MsgBox 一个未公开的API发布于2023-05-27 17:35:54
    转载或复制请以超链接形式并注明出处 演示站

    分享到:

    觉得文章有用就打赏一下文章作者

    支付宝扫一扫打赏

    微信扫一扫打赏

    留言与评论(共有 0 条评论)
       
    验证码: