Pergunta

Estou tentando configurar um userform que irá aparecer, permanecer por 10 segundos e depois fechar automaticamente.Já fiz isso antes no Excel, usando o 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

No entanto, como o Outlook não reconhece o OnTime método, tenho tentado usar o Timer declaração:

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

O problema é que quando o formulário do usuário é aberto, a macro (incluindo o loop) faz uma pausa até que o UserForm seja fechado manualmente...

Qualquer ajuda em uma solução alternativa para isso seria muito apreciada.

Saúde!

Foi útil?

Solução

Fiz alguns testes e o problema parece ser que assim que você mostra o Formulário do Usuário, ele assume o controle e não retorna para example2().

O que parece funcionar é se você colocar o seguinte código no seu formulário Acitvate sub, ele será ocultado corretamente.Isso pode não ser exatamente o que você deseja, você pode estar usando o formulário para outras coisas e esse processo vai bagunçar tudo, mas vai te levar na direção certa.

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 garantirá que o formulário seja exibido corretamente, mas poderá ter alguns efeitos colaterais indesejados.Certifique-se de ler este artigo da Microsoft e um postagem no blog de Jeff Atwood é uma leitura interessante, embora não necessariamente sobre VBA.

Outras dicas

Esta página fornece um complemento de cronômetro personalizado (.xla) que pode funcionar para você.É a mesma ideia do código que você tem acima (isso ficaria no formato 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top