Почему отображение пользовательской формы как выполнения модального кода остановки?

Следующий код 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

Ответы на вопрос(5)

Ваш ответ на вопрос