Excel VBA 中定时关闭的 MsgBox 一个未公开的API
发布时间:2022-09-01 14:49:52
了解 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 VBA 中定时关闭的 MsgBox 一个未公开的API的下载地址:


猜你喜欢
- 微软此前已经承诺将向所有Lumia WP8设备推送升级Win10 Mobile系统更新,微软现在公布了不同地区首批升级Win10 Mobil
- 在平时工作之余,我们偶尔会去看看视频,可是看视频的时候会出现flash无法播放的情况,那么当你遇到Win8.1系统flash无法播放视频怎么
- 本文中小编将给大家分享介绍一下关于在win10系统中右键菜单中添加"在新进程中打开"选项的操作方法,通过此方法我们可以让
- 对于打印奖状,通常我们所采用的方法是将姓名和获几等奖位置空着,等到奖状打印完毕再用手工填写;或者是分别在每张电子奖状上更改名字等信息再打印。
- 如果您的iCloud存储空间开始变满,您可以选择哪些应用程序和程序来存储数据,从而为需要随时访问的重要数据清除空间。那我们如何自定义Mac上
- MathType公式编辑器功能十分强大,能够快速输入各种公式,有的时候因为上下标的存在而导致排版不美观,其实可通过修改公式上下标大小来改变公
- 大多数的用户了解的复印机的使用方法都是来自于打印机提供商的客服,可能打印一张文稿你可以信手拈来,但复印几张原件就让不少用户捉急了,下文为笔者
- 大家在使用excel时,遇到某些特殊情况导致文件没有保存该怎么找到呢?下面就跟小编一起看看吧。Excel找到未保存文件的步骤1.打开Exce
- 说明TYPE 函数返回提供的值的类型。返回值值的类型的数字表示。语法=TYPE(value)参数Value 必需。 需要获取其类型的值。 不
- 如何删除途牛旅游APP发票抬头?现在出行旅游非常方便,可以直接在网上订票出行。在途牛旅游中订了票,想要删除发票抬头,具体该怎么操作?下面就是
- Word在我们工作生活中十分常用,如果我们能够懂得一些小技巧并善于运用它们,Word就是我们生活中的一个好帮手啦。下面教大家一个最基础的小功
- Win10打开MindManager提示“计算机中丢失mfc120u.dll”怎么解决?MindManager是一款思维盗图软件,最近有位W
- 尽管Windows 10无愧于史上最好的Windows这个称号,但一些小问题还是无法避免。最近就有升级了Windows 10正式版的用户发现
- Win10一周年更新用户,包括Win10 Mobile和Windows10 PC用户收到了Build 14393.1198累积性更新,其中P
- Windows11系统怎么设置中国时区?一些朋友用上了Win11系统,但是发现很多东西的显示都不太对劲,就比如说时间就不对,这其实通过设置时
- 微软今天面向Windows 10 PC用户推送了Win10更新四月版(v1803)最新补丁版本号升级到17134.165 具体补丁型号是KB
- 现在很多公司都需要制作工作简报,用于部门的互相的交流,但是很多大学生刚入职不懂怎么做工作简报的,今天小编就教教大家怎么使用word制作工作简
- 处理器可谓是我们电脑的大脑啊,如果我们系统中若果没有的CPU的话,那我们将无法正常的去使用电脑,而且好的CPU能够有效的提升电脑的性能,但是
- 现在很多用户电脑都下载安装了edge浏览器,最近有用户在使用edge浏览器遇到了打不开连网页的情况,那么该怎么去解决问题呢?下面就一起来看看
- 电脑普及了很久,对于装机其实大家都一知半解,通常都是叫电脑维修人员来进行,费时费力。其实我们可以使用U盘启动盘轻松重装系统,只需下载系统文件