Почему отображение пользовательской формы как выполнения модального кода остановки?
Следующий код VBA останавливается наMe.Show
, Из моих тестов кажется, чтоMe.Show
останавливает выполнение всего кода, даже если код находится внутри пользовательской формы.
Эта часть находится вне пользовательской формы:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
Эта часть находится внутри пользовательской формы:
Private Sub ShowProgress()
Me.Show vbModal
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond / 5 * 100
Next intSecond
Me.Hide
End Sub
Код останавливается наMe.Show
после отображения пользовательской формы. Там нет ошибки, он просто прекращает выполнение кода. Кажется, что единственный способ выполнить код внутри модальной UserForm в VBA - это включить его в процедуру UserForm_Activate, например так:
Эта часть находится вне пользовательской формы:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
Эта часть находится внутри пользовательской формы:
Private Sub UserForm_Initialize()
Me.Show vbModal
End Sub
Private Sub UserForm_Activate()
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond / 5 * 100
Next intSecond
Me.Hide
End Sub
Конечно, я могу'т поставитьMe.Show
внутри UserForm_Activate, потому что эта процедура срабатывает только после события UserForm Show.
Документация дляUserForm.ShowModal
говорит "Когда пользовательская форма является модальной, пользователь должен предоставить информацию или закрыть пользовательскую форму перед использованием любой другой части приложения. Последующий код не выполняется до тех пор, пока пользовательская форма не будет скрыта или выгружена. "
Я пытаюсь использовать модальную UseForm в качестве индикатора выполнения, чтобы предотвратить взаимодействие пользователя с приложением во время выполнения процесса. Но это будет трудно сделать, если весь мой код должен быть в процедуре UserForm_Activate.
Я что-то здесь упускаю? Почему все выполнение кода останавливается на?Me.Show