Одна из пользовательских форм занимает слишком много времени для обновления 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 или до того, как занятая пользовательская форма снова становится свободной.
Пожалуйста, дайте мне знать, что пошло не так, как решить проблему или любой другой возможный обходной путь, пожалуйста. Заранее большое спасибо.