Zeitgesteuertes Schließen eines Benutzerformulars durch Outlook VBA
-
29-10-2019 - |
Frage
Ich versuche, ein Benutzerformular einzurichten, das angezeigt wird, 10 Sekunden lang angezeigt wird und dann automatisch geschlossen wird.Ich habe das schon einmal in Excel gemacht, mit dem OnTime
Methode:
Sub Example()
Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _
Procedure:="Hide_userform2"
UserForm2.Show
End Sub
Sub Hide_userform2()
UserForm2.Hide
End Sub
Da Outlook das jedoch nicht erkennt OnTime
Methode, ich habe versucht, die zu verwenden Timer
Stellungnahme:
Sub example2()
Strt = Timer
Do While Timer < Strt + 10
UserForm2.Show
Loop
UserForm2.Hide
End Sub
Das Problem dabei ist, dass beim Öffnen des Benutzerformulars das Makro (einschließlich der Schleife) anhält, bis das Benutzerformular manuell geschlossen wird ...
Für Hilfe bei der Problemumgehung wäre ich sehr dankbar.
Prost!
Lösung
Ich habe einige Tests durchgeführt und das Problem scheint darin zu bestehen, dass das Benutzerformular, sobald Sie es anzeigen, die Kontrolle übernimmt und sie nicht an zurückgibt example2()
.
Was zu funktionieren scheint, ist, wenn Sie den folgenden Code in Ihr Formular einfügen Acitvate
sub, es wird korrekt ausgeblendet.Das ist vielleicht nicht genau das, was Sie wollen, vielleicht verwenden Sie das Formular für andere Zwecke und dieser Vorgang wird es durcheinander bringen, aber es bringt Sie in die richtige Richtung.
Private Sub UserForm_Activate()
Strt = Timer
Do While Timer < Strt + 10
DoEvents 'please read linked documentation on this
Loop
UserForm2.Hide
End Sub
Benutzen DoEvents
stellt sicher, dass das Formular korrekt angezeigt wird, kann jedoch unerwünschte Nebenwirkungen haben.Unbedingt lesen diesen Microsoft-Artikel und ein Blogeintrag von Jeff Atwood ist eine interessante Lektüre, wenn es auch nicht unbedingt um VBA geht.
Andere Tipps
Diese Seite bietet ein benutzerdefiniertes Timer-Add-In (.XLA), das für Sie arbeiten kann.Es ist die gleiche Idee wie der oben angegebene Code (dies würde in den Formularcode zurückgehen): generasacodicetagpre.