Pregunta

Estoy intentando configurar un formulario de usuario que aparecerá, permanecerá durante 10 segundos y luego se cerrará automáticamente.He hecho esto antes en Excel, usando el OnTime método:

Sub Example()
     Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), _ 
     Procedure:="Hide_userform2"
     UserForm2.Show
End Sub

Sub Hide_userform2()
     UserForm2.Hide
End Sub

Sin embargo, debido a que Outlook no reconoce el OnTime método, he estado tratando de utilizar el Timer declaración:

Sub example2()
Strt = Timer
Do While Timer < Strt + 10
    UserForm2.Show
Loop
UserForm2.Hide
End Sub

El problema con esto es que cuando se abre el formulario de usuario, la macro (incluido el bucle) se detiene hasta que el formulario de usuario se cierra manualmente...

Cualquier ayuda para solucionar este problema sería muy apreciada.

¡Salud!

¿Fue útil?

Solución

Hice algunas pruebas y el problema parece ser que una vez que muestras el formulario de usuario, toma el control y no lo devuelve a example2().

Lo que parece funcionar es si pones el siguiente código en el formulario Acitvate sub, se ocultará correctamente.Puede que esto no sea exactamente lo que desea, puede que esté usando el formulario para otras cosas y este proceso lo arruinará, pero lo llevará en la dirección correcta.

Private Sub UserForm_Activate()
    Strt = Timer
    Do While Timer < Strt + 10
        DoEvents 'please read linked documentation on this
    Loop
    UserForm2.Hide
End Sub

Usando DoEvents Se asegurará de que el formulario se muestre correctamente, pero puede tener algunos efectos secundarios no deseados.Asegúrate de leer este artículo de Microsoft y un entrada en el blog de Jeff Atwood es una lectura interesante, aunque no necesariamente sobre VBA.

Otros consejos

Esta página proporciona un complemento de temporizador personalizado (.xla) que puede funcionar para usted.Es la misma idea que el código que tienes arriba (esto iría en el formato de código subyacente):

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top