我在 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
一些研究表明这可能是某些 MS Office 应用程序中的错误。我的依据是this https://technet.microsoft.com/en-us/library/ee156593.aspx and this http://ss64.com/vb/popup.html似乎没有说任何表明您以错误的方式使用该命令的内容,并且this http://www.mrexcel.com/forum/general-excel-discussion-other-questions/143673-visual-basic-applications-msgbox-timer.html表明其他用户已经设法使该代码准确地工作。
我在运行 Excel 和 Office 365 的 Windows PC 上对此进行了测试,并且遇到了与您相同的问题 - 显示消息框,但未关闭。我找到了建议的解决方法here https://social.technet.microsoft.com/Forums/scriptcenter/en-US/251143a6-e4ea-4359-b821-34877ddf91fb/wshpopup-timeout-bug,并且您可能对该页面上的讨论感兴趣(特别是一位用户尝试向 Microsoft 提交有关 VBA 的错误报告的描述)。名为 ウィンドウズsukuryputopupurogurama 的用户提出的解决方案是通过声明外部函数来调用本机 user32.dll -this http://www.jkp-ads.com/articles/apideclarations.asp页面上有一些如何使用 VBA 调用 C dll 的示例。据说 Microsoft 未记录 MessageBoxTimeout 函数,但您可以找到很多相关信息here http://www.pinvoke.net/default.aspx/user32/MessageBoxTimeout.html.
另一个对我有用的选项是使用 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
为了使其能够处理更复杂的消息,您可能需要转义一些字符。还有另一个问题here https://stackoverflow.com/questions/28134997/can-i-run-vbscript-commands-directly-from-the-command-line-i-e-without-a-vbs-f这显示了 mshta 在 shell/控制台中执行 vbscript 的能力的其他用途。
最后,正如一位用户所建议的那样,您可以简单地创建一个带有 doevents 循环的自定义用户表单,该循环会倒计时然后自行关闭。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)