【VBA研究】定时关闭MsgBox及相关未公开的API
来源:互联网 发布:阳光512控台编程光束灯 编辑:程序博客网 时间:2024/06/06 04:47
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
MyMsgBox ("这只是一个测试!")
End Sub
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
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
- 定时自动关闭MsgBox
- 未公开的API: addFrameScript()
- 未公开的API: addFrameScript()
- Windows未公开的API
- 定时自动关闭的消息对话框(效果同msgbox)
- QTP:代替Msgbox的方法,可以定时自动关闭
- 【整理】vba中MsgBox的参数及用法
- 整理的一些未公开的API
- 如何调用未公开的API函数
- 如何调用未公开的API函数
- VBA中MsgBox的几个用法
- VBA中msgbox的用法小结
- VBA中msgbox的用法小结
- VBA中msgbox的用法小结
- VBA中msgbox的用法小结
- [Excel VBA]如何自动关闭MsgBox?
- 【VBA研究】VBA中日期和时间相关的计算
- 关于右键菜单
- Objective-C语言——NSDictionary不可变字典
- TCP/IP学习之简介
- 浏览器历史
- Matlab绘图-很详细,很全面(包含各种标示符的输入方法)
- 【VBA研究】定时关闭MsgBox及相关未公开的API
- DOM操作--添加事件处理程序
- java 中容易混淆的知识点
- Nuget下载好Sqlite.EF6后出现运行报错处理办法
- swift学习记录(String)
- java集合——队列和双端队列+优先级队列
- 浅谈 JS 创建对象的 8 种模式
- JavaScript学习过程中小知识记录
- TCP,IP详解,卷一:协议学习笔记之第六章 ICMP: Internet控制报文协议