Процедура Application.OnTime запускается после выполнения обновлений кликов UserForm - PullRequest
0 голосов
/ 22 января 2020

Одна из пользовательских форм занимает слишком много времени для обновления Excel после нажатия кнопки «Отправить». Если это занимает более 5 секунд, покажите пользователю сообщение «Пожалуйста, подождите ...» и закройте его после завершения обновления. Допустим, имя пользовательской формы - «USERFORM_A». Я использовал кнопку с надписью «Пожалуйста, подождите ...», и я включаю / выключаю видимость. В событии нажатия кнопки отправки «USERFORM_A» я использую следующий код:

Application.OnTime EarliestTime:=fireTime, Procedure:="'PleaseWaitShow ""USERFORM_A""'"

И процедура выглядит следующим образом

Sub PleaseWaitShow(usrFrm As String)
    Dim frm As UserForm
    For Each frm In VBA.UserForms
        If StrComp(TypeName(frm), usrFrm, vbTextCompare) = 0 Then
            With frm
                .Controls("UserWaitPrompt").Visible = True
                .Controls("UserWaitPrompt").Top = ((.InsideHeight - .Controls("UserWaitPrompt").Height) / 2) + .ScrollTop
                .Controls("UserWaitPrompt").ZOrder
                .Repaint
            End With
            Exit For
        End If
    Next frm
End Sub

Проверено с помощью debug.print и пришло к знаю, что не работает процедура. Изменено событие нажатия кнопки «USERFORM_A», как показано ниже

    t = Timer
    Debug.Print "Before OnTime: " & Now
    Application.OnTime EarliestTime:=Now, Procedure:="Test_TT"
    Debug.Print "After OnTime: " & CDbl(Timer - t)
'Several lines of code
'Wrote below code before the completion message of submit button
    Debug.Print "Before closure: " & CDbl(Timer - t)

, и до завершения обновления при нажатии кнопки, а вывод в непосредственном окне, как показано ниже

Before OnTime: 1/22/2020 8:43:58 PM
After OnTime: 0
Before closure: 13.078125
Inside Test_TT: 1/22/2020 8:44:11 PM

Так что это довольно ясно что Application.OnTime работает только после завершения события click или до того, как занятая пользовательская форма снова становится свободной.

Пожалуйста, дайте мне знать, что пошло не так, как решить проблему или любой другой возможный обходной путь, пожалуйста. Заранее большое спасибо.

...