能够定时自动关闭的Msgbox消息对话框

2017-09-21 08:40:00
zstmtony
原创
277
在Access VBA或Excel VBA中如何自动关闭弹出的消息框(即定时消失)
经过研究和测试,可以通过 API函数MessageBoxTimeout,可控制消息框自动关闭

这个API 函数就是 MessageBoxTimeOut函数(注意Windows 2000没有这个函数,必须在Windows XP及以上操作系统才有):


API MessageBoxTimeOut函数原型如下:


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



参数说明:


    .参数 hwnd, 整数型, , 窗口句柄  
    .参数 lpText, 文本型, , 消息框内容  
    .参数 lpCaption, 文本型, , 消息框标题  
    .参数 uType, 整数型, , 消息框按钮类型,确认按钮、重试按钮之类  
    .参数 wlange, 整数型, , 一般为0,语言ID  
    .参数 dwTimeout, 整数型, , 延迟的时间 ,以毫秒为单位  


参数详细具体说明:

‘Office中国整理


hwnd:窗口句柄
lpText:弹出消息框的内容
lpCaption:弹出消息框的标题
uType:按钮类型,以下给出常量,可相加,每组只能取一个类型,第五组除外

第一组(描述对话框中显示按钮的类型与数目):
0、#确认钮; 1、#确认取消钮; 2、#放弃重试忽略钮; 3、#取消是否钮;     4、#是否钮; 5、#重试取消钮
第二组(描述图标的样式):
16、#错误图标; 32、#询问图标; 48、#警告图标; 64、#信息图标
第三组(说明哪一个按钮是缺省默认值):
0、#默认按钮一; 256、#默认按钮二; 512、#默认按钮三; 768、#默认按钮四
第四组(决定如何等待消息框结束):
0、#程序等待; 4096、#系统等待
第五组(其它):
65536、#位于前台; 524288、#文本右对齐

wLanguageId:语言ID,默认写0就可以了
dwMilliseconds:等待时间,单位为毫秒,3秒后关闭就写3000

Tmtony测试后特别说明:

1.参数说明:父窗口的句柄为NULL的情况下,将弹出非模态对话框;延时关闭的时间为0的情况下,弹出的MessageBox需要手动关闭

2.这个是微软未文档化的MessageBoxTimeout函数,可以延时自动关闭自身弹出的MessageBox对话框,但微软将来是否继续支持,不得而知

3.需要指出的是,Windows 2000的user32.dll没有导出这个函数。

4. dwTimeout:等待时间,单位为毫秒,3 秒后关闭就写 3000

分享