Outlook VBA приурочил закрытие пользовательской формы - PullRequest
2 голосов
/ 07 декабря 2011

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

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

Любая помощь по обходному пути дляэто будет высоко ценится.

Ура!

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

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

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

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.

1 голос
/ 07 декабря 2011

На этой странице имеется настраиваемая надстройка таймера (.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...