【VBA研究】定时关闭MsgBox及相关未公开的API
iamlaosong文
大家都知道,VBA中自带的MsgBox不能自动关闭,某些特殊情况下需要在指定时间内用户没有点击消息框按钮后能继续运行代码,需要用到定时关闭的消息框,我一般都是自己做一个窗体显示,再用定时函数关闭对话框。方法如下:
1、创建窗体UserForm1,窗体的初始化函数最简单如下:
Private Sub UserForm_Initialize()
Label1.Caption = “欢迎使用本工作薄!”
Application.OnTime Now + TimeValue("00:00:05"), "CloseMsgBox"
End Sub
下面是防止用户自己关闭窗口:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = 1
End Sub
2、创建一个模块,模块中放一个关闭窗体的过程CloseMsgBox:
Sub CloseMsgBox()
Unload UserForm1
End Sub
反复使用的时候,可以用下列方法,这种方法关闭不能在Initialize事件中放定时器,显示的内容可以通过函数变量传递(进一步可以将显示时间作为函数变量或者增加其它功能),例如:
UserForm1.Label1.Caption = hint
Application.OnTime Now + TimeValue("00:00:05"), "CloseMsgBox"
UserForm1.Show
Sub CloseMsgBox()
UserForm1.Hide
End Sub
Sub test()
MyMsgBox ("这只是一个测试!")
End Sub
自己做窗体的好处是可以按照自己喜欢的方式和样子做消息框,可以附加一些自己想要的功能,相对也就比较麻烦,其实API提供了这样一个未公开的API可以实现定时关闭消息框,wType参数改成可以提示输入VBA的vbMsgboxStyle常数,用起来非常方便。
Private Declare Function MsgBoxEx 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
这个API函数的参数如下:
hwnd:窗口句柄,可以设为0
lpText:消息框显示内容,类似于MsgBox函数的第一个参数Prompt
lpCaption:消息框标题,类似于MsgBox函数的第三个参数Caption
wType:消息框类型,类似于MsgBox函数的第二个参数Buttons
wlange:不是太明白这个参数,0或者1都看不出什么差别
dwTimeout:延时时间,单位是毫秒
返回的值和vbMsgBoxResult常数一样,多了一个返回值32000表示超过延时时间未选择任何按钮。
下面是测试程序:
Private Sub TestMsgboxEx()
Dim ret As Long
ret = MsgBoxEx(0, "请选择", "两秒后自动关闭", vbYesNo + vbInformation, 1, 2000)
If ret = 32000 Then
Debug.Print "超时关闭"
ElseIf ret = vbYes Then
Debug.Print "选择Yes"
ElseIf ret = vbNo Then
Debug.Print "选择No"
End If
End Sub
【VBA研究】定时关闭MsgBox及相关未公开的API相关推荐
- 华为交换机关闭网页服务器,华为交换机的端口定时关闭方法
原标题:华为交换机的端口定时关闭方法 一些朋友因业务须求,需要去定时关闭交换机端口,但是很多人会在这方面出现了一些困扰,今天朗联就为大家分享两种关于定时关闭华为交换机端口,实现在某一特定时间内关闭交换 ...
- 柯尼卡美能达提示关闭第一侧盖板未关闭故障
在日常维修美能达复印机中我们经常遇见很多种机器型号的各种故障及维修错误代码,由全技术提供故障交流问题,在柯尼卡复印机的故障提示警告我们比较常见的是出现维修召唤M2代码,正常进入维修模式清除即可,柯尼卡 ...
- base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...
- 定时关闭华为交换机的端口
关于因业务须求,定时关闭交换机的端口的做法 通过对各种资料的查询与对比,我现在知道了两种可以实现在某一特定时间内关闭交换机端口,并在另一时间段打开端口的做法.现我将其做法与大家分享一下.希 ...
- C++ MessageBox 定时关闭
定时关闭MessageBox MessageBoxTimeout是一个微软未公开的Windows API函数.实现定时消息,功能类似于MessageBox.如果用户不回应,能定时关闭消息框.函数由us ...
- winform 关于Messagebox自动定时关闭和自定义提示框总按钮上文本的问题的整理
如果要改变Messagebox上按钮的文本和自动关闭Messagebox提示框,一种方法是自定义一个winform窗口模仿替代Messagebox,变通的实现效果,另一种方法是通过调用系统的API来实 ...
- android 自定义dialog 定时关闭,Android,对话框定时自动关闭的实现
初学Android没几天,最近在做一个项目,需要实现对话框弹出一段时间后自动消失,网上查找了部分资源并参考了SDK后,整理了下相关的方法: 实现对话框的弹出消隐,现实主要的方法是使用Toast.Toa ...
- C#之windows桌面软件第五课:串口助手实现定时关闭设备、鼠标移动使按钮颜色变化功能
本节在串口助手上实现: 1.定时关闭设备 2.移动鼠标使按钮颜色变换 Form1.cs代码如下: using System; using System.Collections.Generic; usi ...
- 设计合理的实验方案来研究阳离子改性棉织物与未改性棉的染色动力学性能
染色动力学性能研究染色的什么问题?设计合理的实验方案来研究阳离子改性棉织物与未改性棉的染色动力学性能?并指出如何计算反映染色动力学的主要参数? 标准答案: 染色动力学研究染色速率问题. 为了研究阳离子 ...
最新文章
- python如何控制程序的运行顺序_Python流程控制-1 顺序执行
- 「学习笔记——Python」Python 的模块(Modules)
- 王者体验服服务器注册人数已满,王者官方大厅奖励有多难获得?服务器直接崩溃,玩家:别发红包了...
- ASP.NET MVC从数据库读取、存入图片
- mysql 远程主机强迫关闭了一个现有的连接_MySQL的explain优化(3)
- java 在面板中加入标签_创建一个JTabbedPane面板,为每一个标签设置一个名称
- cnn 回归 坐标 特征图_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
- 开机登录时取消Ctrl+Alt+Delete
- php 管理数组数据库,【PHP】一个用PHP数组管理数据库表结构更新功能的烂代码~...
- mysql 测试数据生成器_测试数据生成器
- 学而思编程python软件下载-靠品牌还是靠实力?猿编程、学而思编程、网易卡搭等机构深度测评...
- bootstrap搜索图标的使用
- QT编译程序出现[ui_Widget.h] Error 1
- MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
- tracker使用_如何使用Tracker查找钥匙,钱包,电话或其他任何东西
- 脑裂是什么,zk是如何解决脑裂问题的
- 无人机姿态解算_扩展卡尔曼滤波(2)
- python在tk界面播放本地视频_tkinter做一个本地视频播放器(2)——弹幕
- Task 4: Contextual Word Embeddings
- 什么是芯片?芯片内部制造工艺了解吗?