Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Outlook VBA用户窗体的定时关闭_Vba_Outlook_Timer_Userform - Fatal编程技术网

Outlook VBA用户窗体的定时关闭

Outlook VBA用户窗体的定时关闭,vba,outlook,timer,userform,Vba,Outlook,Timer,Userform,我正在尝试设置一个userform,它将出现,保持10秒,然后自动关闭。 我以前在Excel中使用OnTime方法进行过此操作: Sub Example() Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _ Procedure:="Hide_userform2" UserForm2.Show End Sub Sub Hide_userform2() UserForm2.Hid

我正在尝试设置一个userform,它将出现,保持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
子示例2()
Strt=计时器
定时器
问题是当用户窗体打开时,宏(包括循环)会暂停,直到用户窗体手动关闭

如果您能为我们提供解决方案,我们将不胜感激

干杯

提供可能适合您的自定义计时器加载项(.xla)。这与上面的代码相同(这将以代码隐藏的形式出现):


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

如果您将以下代码放入表单的
Acitvate
sub,它将正确隐藏。这可能不是您想要的,您可能正在将表单用于其他事情,这个过程会把它搞砸,但它会让您朝着正确的方向前进

Private Sub UserForm_Activate()
    Strt = Timer
    Do While Timer < Strt + 10
        DoEvents 'please read linked documentation on this
    Loop
    UserForm2.Hide
End Sub
Private子用户表单_Activate()
Strt=计时器
定时器

使用
DoEvents
可确保表单正确显示,但可能会产生一些不必要的副作用。请务必阅读Jeff Atwood的a,这是一本有趣的读物,但不一定是关于VBA的。

谢谢Tough Kaveman,但不幸的是,我需要在没有自定义加载项的情况下运行它……您能解释一下您的目标吗?这可能会澄清问题,并提供更好的解决方案。@JP我正在自动化数据验证过程,需要内置自动化进度和可能影响结果的任何错误的通知。但是,由于进程通常在没有任何人监视的情况下运行,因此我需要任何通知来自动关闭,以便验证可以继续。我正试图避开
msgbox
,以便在需要扩展通知或构建更复杂的通知时,在通知中具有更大的灵活性。
Private Sub UserForm_Activate()
    Strt = Timer
    Do While Timer < Strt + 10
        DoEvents 'please read linked documentation on this
    Loop
    UserForm2.Hide
End Sub