我正在尝试设置一个会出现的用户窗体,保持10秒,然后自动关闭。我以前在Excel中这样做过,使用 OnTime 方法:

Sub Example()
     Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _ 
     Procedure:="Hide_userform2"
     UserForm2.Show
End Sub

Sub Hide_userform2()
     UserForm2.Hide
End Sub

但是,由于Outlook无法识别 OnTime 方法,我一直在尝试使用 Timer 声明:

Sub example2()
Strt = Timer
Do While Timer < Strt + 10
    UserForm2.Show
Loop
UserForm2.Hide
End Sub

这样做的问题是,当用户窗体打开时,宏(包括循环)暂停,直到手动关闭用户窗体。..

任何解决方法的帮助将不胜感激。

干杯!

有帮助吗?

解决方案

我运行了一些测试,问题似乎是,一旦您显示用户表单,它就会获得控制权,并且不会将其返回给 example2().

似乎有效的是,如果你把下面的代码放在你的表单中 Acitvate 子,它会正确隐藏。这可能不是你想要的,你可能正在使用表单进行其他事情,这个过程会搞砸它,但它会让你朝着正确的方向前进。

Private Sub UserForm_Activate()
    Strt = Timer
    Do While Timer < Strt + 10
        DoEvents 'please read linked documentation on this
    Loop
    UserForm2.Hide
End Sub

使用 DoEvents 将确保表格显示正确,但可能有一些不必要的副作用。一定要阅读 这篇微软文章 和一个 博客文章 杰夫阿特伍德是一个有趣的阅读,虽然不一定是关于VBA。

其他提示

此页面提供了自定义计时器加载项(。xla)可能对您有用。这与您上面的代码具有相同的想法(将以后面的代码形式出现): 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top