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!

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top