我正在尝试设置将出现的用户表单,保留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 ...
对此解决方法的任何帮助都将非常感激。
干杯!
答案 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。