以下 VBA 代码停在Me.Show
. 从我的测试来看,似乎Me.Show
停止了所有代码的执行,即使代码在用户窗体中也是如此。
这部分在 UserForm 之外:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
这部分在 UserForm 内:
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 中执行代码的唯一方法是将其包含在 UserForm_Activate 过程中,如下所示:
这部分在 UserForm 之外:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
这部分在 UserForm 内:
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
?