VBA中利用WshShell对象轻易实现自消失的对话框
前言
WshShell 对象功能强大,以前一直只是用它来打开其它程序。无意中发现它也提供一个popup 函数,利用这个函数可以轻易实现自消失的对话框。这可是以前要费好大力气曲折实现的功能,真是踏破铁鞋无觅处,得来全不费功夫。
关于WshShell
在网上查到的资料中,多数会用后引用的方法来创建WshShell对象:
Dim objWshShell As Object
Set objWshShell = CreateObject("WScript.Shell")
在之前的文章中也讲过了,这个办法执行时效率高,但是缺点是写代码时不会提示方法和属性,对初学都不友好。对初学者,推荐前引用方法,就是在Reference中加入对WshShell的引用(Windows Script Host Object Model):
添加了这个引用后,就可以很方便地用以下方法使用:
Dim objWshShell As New WshShell
写代码时,会有提示:
WshShell对象的popup函数(方法)
这个函数功能与MsgBox()函数用法类似,都返回一个Integer值,代表用户的选择。
示例代码:
Sub test()
Dim objWshShell As New WshShell
Dim intChoice As Integer
Dim strMsg As String
strMsg = "您输入的密码不正确,是否需要继续尝试?" & vbCrLf & "请在5秒之内选择,否则默认为退出!"
intChoice = objWshShell.Popup(strMsg, 5, "Remind", vbYesNo + vbQuestion + vbDefaultButton2 + vbApplicationModal)
Select Case intChoice
Case -1, vbNo
MsgBox "你不想尝试了”"
Case vbYes
MsgBox "你还想继续"
End Select
Set objWshShell = Nothing
End Sub
参数
参数1: 要显示给用户的提示语
参数2: 对话框最长显示多久(单位:秒)
参数3: 对话框标题
参数4:选择类型
注意:
如果超时未选择,则返回值是 -1
如上述例子,参数4 可以是几个角度的组合,与MsgBox函数完全一样。下表中没有列出vbApplicationModal (表示显示在桌面最顶层)
返回值列表如下: