Chiusura temporizzata VBA di Outlook di un modulo utente
-
29-10-2019 - |
Domanda
Sto cercando di configurare un utente utente che apparirà, rimanere per 10 secondi, quindi chiuderà automaticamente.
L'ho fatto prima in Excel, usando il metodo 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
.
Tuttavia, poiché Outlook non riconosce il metodo OnTime
, ho cercato di utilizzare l'istruzione Timer
:
Sub example2()
Strt = Timer
Do While Timer < Strt + 10
UserForm2.Show
Loop
UserForm2.Hide
End Sub
.
Il problema con questo è che quando si apre il modulo utente, la macro (incluso il ciclo) si ferma finché non viene chiusa manualmente ...
Qualsiasi aiuto su una soluzione alternativa per questo sarebbe molto apprezzato.
Cheers!
Soluzione
Ho eseguito alcuni test e il problema sembra essere che una volta mostrato il modulo utente, prende il controllo e non lo restituisce a example2()
.
Quello che sembra funzionare è che se metti il seguente codice nel sub Acitvate
del tuo modulo, verrà nascosto correttamente.Potrebbe non essere esattamente quello che desideri, potresti utilizzare il modulo per altre cose e questo processo lo rovinerà, ma ti porterà nella giusta direzione.
Private Sub UserForm_Activate()
Strt = Timer
Do While Timer < Strt + 10
DoEvents 'please read linked documentation on this
Loop
UserForm2.Hide
End Sub
L'utilizzo di DoEvents
assicurerà che il modulo venga visualizzato correttamente ma potrebbe avere alcuni effetti collaterali indesiderati.Assicurati di leggere questo articolo Microsoft e un post del blog di Jeff Atwood è una lettura interessante anche se non necessariamente su VBA.
Altri suggerimenti
Questa pagina fornisce un add-in timer personalizzato (.xla) che potrebbe funzionare per te.È la stessa idea del codice che hai sopra (questo sarebbe nella forma 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