Outlook VBA定时关闭用户窗体

时间:2011-12-07 02:26:52

标签: vba timer outlook outlook-vba 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

这个问题是当用户表单打开时,宏(包括循环)暂停,直到手动关闭UserForm ...

对此解决方法的任何帮助都将非常感激。

干杯!

2 个答案:

答案 0 :(得分:1)

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

Dim WithEvents CountdownTimer As TMTimer.clsTimer

Private Sub startCounter()
    Set CountdownTimer = TMTimer.createTimer
    With CountdownTimer
        .CountdownDurationMilliSecs = 10 * 1000
        .TimerType = .TimerTypeCountdown
        .startTimer
    End With
End Sub

Private Sub CountdownTimer_CountdownComplete()
    Me.Hide
End Sub

Private Sub UserForm_Activate()
    startCounter
End Sub

答案 1 :(得分:1)

我运行了一些测试,问题似乎是,一旦您显示用户表单,它就会获得控制权并且不会将其返回到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可确保表单正确显示,但可能会产生一些不必要的副作用。请务必阅读this Microsoft article和Jeff Atwood的blog post是一个有趣的读物,但不一定是关于VBA。