Outlook VBA a chronométré la fermeture d'une forme utilisateur
-
29-10-2019 - |
Question
J'essaie de configurer une forme utilisateur qui apparaîtra, reste pendant 10 secondes, puis fermer automatiquement. J'ai déjà fait cela dans Excel, en utilisant le OnTime
méthode:
Sub Example()
Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _
Procedure:="Hide_userform2"
UserForm2.Show
End Sub
Sub Hide_userform2()
UserForm2.Hide
End Sub
Cependant, parce que Outlook ne reconnaît pas le OnTime
Méthode, j'ai essayé d'utiliser le Timer
déclaration:
Sub example2()
Strt = Timer
Do While Timer < Strt + 10
UserForm2.Show
Loop
UserForm2.Hide
End Sub
Le problème avec cela est que lorsque le formulaire utilisateur s'ouvre, la macro (y compris la boucle) s'arrête jusqu'à ce que la forme utilisateur soit fermée manuellement ...
Toute aide sur une solution de contournement pour cela serait très appréciée.
Acclamations!
La solution
J'ai effectué des tests et le problème semble être qu'une fois que vous affichez le formulaire utilisateur, il prend le contrôle et ne le retourne pas à example2()
.
Ce qui semble fonctionner, c'est si vous mettez le code suivant dans votre formulaire Acitvate
sous, il se cachera correctement. Ce n'est peut-être pas exactement ce que vous voulez, vous utilisez peut-être le formulaire pour d'autres choses et ce processus va le gâcher, mais cela vous met dans la bonne direction.
Private Sub UserForm_Activate()
Strt = Timer
Do While Timer < Strt + 10
DoEvents 'please read linked documentation on this
Loop
UserForm2.Hide
End Sub
Utilisant DoEvents
S'assurera que le formulaire apparaît correctement mais peut avoir des effets secondaires indésirables. Assurez-vous de lire Cet article Microsoft et un article de blog Par Jeff Atwood est une lecture intéressante mais pas nécessairement sur VBA.
Autres conseils
Cette page Fournit un complément de minuterie personnalisé (.xla) qui peut fonctionner pour vous. C'est la même idée que le code que vous avez ci-dessus (cela irait dans le formulaire Code-Behind):
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