InfoBox.Popup拒绝关闭计时器到期

Ken*_*erg 3 vba

在其他帖子的Outlook 2013模块中拼凑此测试程序,其中应显示一个弹出框,然后在3秒后自动关闭.问题是它永远不会关闭.

Sub MessageBoxTimer()
    Dim AckTime As Integer, InfoBox As Object
    Set InfoBox = CreateObject("WScript.Shell")

    AckTime = 3
    Select Case InfoBox.Popup("Click OK (this window closes automatically after 3 seconds).", _
    AckTime, "This is your Message Box", 0)
    Case 1, -1
        Exit Sub
    End Select
End Sub
Run Code Online (Sandbox Code Playgroud)

Orp*_*hid 6

一些研究表明,这可能是某些MS Office应用程序中的错误.我的基础是这个似乎没有任何暗示你以错误的方式使用命令的事情,表明其他用户已经设法准确地使用这个代码.

我在使用Office 365运行Excel的Windows PC上对此进行了测试,并且遇到了与您相同的问题 - 显示消息框但未关闭.我在这里找到了一个建议的解决方法,并且您对该页面的讨论可能会引起您的兴趣(特别是一个用户尝试向Microsoft提交有关VBA的错误报告).由用户提出的解决方案是通过声明外部函数来调用本机user32.dll - 这个页面有一些如何用VBA调用C dll的例子.据说MessageBoxTimeout函数是微软没有记录,但你可以在这里找到很多相关信息.

另一个对我有用的选项是使用mshta.exe运行对Shell.Popup的vbscript调用:

Function Test()

    Dim Shell
    Set Shell = CreateObject("WScript.Shell")
    Shell.Run "mshta.exe vbscript:close(CreateObject(""WScript.shell"").Popup(""Test"",3,""Message""))"

End Function
Run Code Online (Sandbox Code Playgroud)

要使其能够处理更复杂的消息,您可能需要转义一些字符.这里还有另一个问题,它显示了mshta在shell /控制台中执行vbscript的能力的其他用途.

最后,正如一个用户所建议的那样,您可以简单地创建一个自定义用户表单,其中的doevents循环会倒计时然后自行关闭.