VBA消息框相比大家都用过,MsgBox,用于给用户展示一些信息。
有时候我们希望这种消息框一段时间后自行关闭。
今天跟大家分享一下具体操作。
VBA中实现这种自动关闭的延时对话框,需要借用WIndows操作系统的API。需要先声明该API,然后在模块中调用。
声明API
32位系统和64位系统,声明方法略有不同。参数信息如下:
参数 | 类型 | 说明 |
hwnd | long指针 | 窗口句柄。一般赋值0,表示当前窗口句柄。 |
lpText | 字符串 | 要展示给用户的消息。 |
lpCaption | 字符串 | 对话框标题 |
wType | VbMsgBoxStyle | VbMsgBoxStyle常量。消息框有vbInformation。 |
wlange | long | 赋值1即可 |
dwTimeout | long | 超时时间,单位:毫秒。超过时间自动关闭对话框。 |
#If Win64 Then '64位
Public Declare PtrSafe Function MessageBoxTimeout 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
Public Declare Function MessageBoxTimeout 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 testMessageBoxTimeout()
MessageBoxTimeout 0, "这个对话框将在3秒后自动关闭。", "自动关闭的对话框", vbInformation, 1, 3000
End Sub
效果如下: