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!

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top