未公开的秘密花园--VBA中实现自动关闭消息框

2024-01-05 07:50

本文主要是介绍未公开的秘密花园--VBA中实现自动关闭消息框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MsgBox用于显示提示信息,并且可以根据用户的不同选择执行不同的后续操作。例如:使用如下消息框获取用户选择,如果点击“是”,则继续执行程序,如果点击“否”,则结束程序执行。
在这里插入图片描述
但是这将带来一个问题,显示消息框时,代码过程将处于暂停状态,如果用户没有进行选择,后续代码无法执行。
如果消息框只是提醒用户,并不需要获取用户的输入,那么使用可以自动关闭的消息提示框,可以避免程序暂停挂起,无法继续执行的问题,但是VBA中提供的MsgBox无法实现自动关闭的功能。下面介绍一个未公开的Windows API函数,可以完美实现自动关闭的消息框。
示例代码如下:

#If VBA7 And Win64 Then
Private Declare PtrSafe Function MessageBoxTimeout Lib "user32" _Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, _ByVal lpText As String, _ByVal lpCaption As String, _ByVal wType As Long, _ByVal wlange As Long, _ByVal dwTimeout As Long) As Long
#Else
Private Declare Function MessageBoxTimeout Lib "user32" _Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, _ByVal lpText As String, _ByVal lpCaption As String, _ByVal wType As Long, _ByVal wlange As Long, _ByVal dwTimeout As Long) As Long
#End If
Sub Demo1()' 只有确定按钮MessageBoxTimeout 0, "3 秒后自动关闭", "DEMO1", 0, 0, 3000MsgBox "VBA消息框", vbOKOnly, "DEMO1-VBA"
End Sub
Sub Demo2()' 三个按钮,第二按钮为默认MessageBoxTimeout 0, "3 秒后自动关闭", "DEMO2", 275, 0, 3000MsgBox "VBA消息框", vbDefaultButton2 + vbCritical + vbYesNoCancel, "DEMO2-VBA"
End Sub

运行Demo1,依次显示如下两个消息框,第1个消息框3 秒后自动关闭。
在这里插入图片描述在这里插入图片描述

运行Demo2,依次显示如下两个消息框,第1个消息框3 秒后自动关闭。
在这里插入图片描述在这里插入图片描述
【代码解析】
第1~17行代码声明API函数MessageBoxTimeout
第2~8行代码是适用于64位系统的声明函数。
第10~16行代码是适用于32位系统的声明函数。
API函数的参数看似复杂,其实和VBA中的MsgBox函数时类似的。

参数含义MsgBox对应参数
hwnd窗口句柄-
lpText消息框提示信息prompt
lpCaption消息框标题title
wType消息框类型buttons
wlange函数扩展,通常为0-
dwTimeout延迟关闭时间,单位毫秒-

第25行代码中wType参数值为275,相当于下面三个VBA常量值的和。

VBA常量常量值
vbDefaultButton2256
vbCritical16
vbYesNoCancel3

在Office VBA使用此API函数时,可以直接使用这些常量值,代码如下:

MessageBoxTimeout 0, "3 秒后自动关闭", "DEMO2", vbDefaultButton2 + vbCritical + vbYesNoCancel, 0, 10000

这篇关于未公开的秘密花园--VBA中实现自动关闭消息框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572165

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义