Outlook VBA закрывает пользовательскую форму по времени

StackOverflow https://stackoverflow.com/questions/8409690

Вопрос

Я пытаюсь настроить пользовательскую форму, которая появится, останется на 10 секунд, а затем автоматически закроется.Я делал это раньше в Excel, используя 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

Однако поскольку Outlook не распознает OnTime метод, я пытался использовать Timer заявление:

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

Проблема в том, что когда открывается форма пользователя, макрос (включая цикл) приостанавливается до тех пор, пока пользовательская форма не будет закрыта вручную...

Любая помощь в обходном пути для этого будет очень признательна.

Ваше здоровье!

Это было полезно?

Решение

Я провел несколько тестов, и проблема, похоже, в том, что как только вы показываете форму пользователя, она берет на себя управление и не возвращает ее. example2().

Кажется, что это работает, если вы поместите следующий код в свою форму Acitvate sub, он скроется правильно.Возможно, это не совсем то, что вам нужно, возможно, вы используете форму для других целей, и этот процесс все испортит, но он приведет вас в правильном направлении.

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

С использованием DoEvents обеспечит правильное отображение формы, но может иметь некоторые нежелательные побочные эффекты.Обязательно прочитайте эта статья Microsoft и Сообщение блога Джеффа Этвуда — интересное чтение, хотя и не обязательно о VBA.

Другие советы

Эта страница предоставляет пользовательскую надстройку таймера (.xla), которая может вам подойти.Это та же идея, что и код, который у вас есть выше (это будет в виде кода программной части):

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top