gpt4 book ai didi

vba - 为什么将用户窗体显示为模态停止代码执行?

转载 作者:行者123 更新时间:2023-12-04 10:32:26 24 4
gpt4 key购买 nike

以下VBA代码在Me.Show处停止。根据我的测试,即使代码位于UserForm内,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处停止。没有错误,只是停止执行代码。似乎在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处停止?

最佳答案

当表单显示为vbModal时,代码将暂停执行并等待用户与表单的交互。例如,单击按钮或使用下拉菜单。

如果您更新表单属性

ShowModal = False

并从您的代码中删除 vbModal。显示表单时,这将允许代码执行继续。

关于vba - 为什么将用户窗体显示为模态停止代码执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com