2

我正在尝试设置一个将出现的用户表单,保持 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

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

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

干杯!

4

2 回答 2

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将确保表单正确显示,但可能会产生一些不需要的副作用。请务必阅读这篇 Microsoft 文章,Jeff Atwood 的博客文章很有趣,但不一定是关于 VBA。

于 2011-12-07T18:44:57.573 回答
1

此页面提供了可能适合您的自定义计时器加载项 (.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
于 2011-12-07T03:15:22.990 回答