停用Excel VBA用户窗体

我在Excel vba中有一些macros,我在Excel表格上执行一些function,大约需要30秒才能完成。 所以我想在这段时间内显示带有进度条的用户表单。

我尝试使用userform.show在函数的最开始和userform.hide结束,但我发现没有行动可以在后台执行。

所以只是想知道是否有任何回头让处理在窗体显示时在后台完成。

非常感谢 :)

 Private Sub CommandButton1_Click() '--------------Initialize the global variables---------------- UserForm1.Show nameOfSheet2 = "Resource Level view" nameOfSheet3 = "Billable Hours" nameOfSheet4 = "Utilization" '------------------------------------------------------------- Dim lastRow, projectTime, nonProjectTime, leaveAndOther Dim loopCounter, resourceCounter lastRow = 0 projectTime = 0 nonProjectTime = 0 leaveAndOther = 0 resourceCounter = 2 Set workbook1 = Workbooks.Open(File1.Value) Sheet3Creation Sheet2Creation Sheet4Creation UserForm1.Hide End Sub 

进度条的用法是显示当前正在运行的代码的进度。 而我不知道是否有人想在代码运行时对表单做任何事情…

无论如何,如果你想在表单显示时与表单交互,你可以尝试添加下面的代码:

  UserForm.Show vbvModeless 

而要更新Modeless表单,您必须在子程序中添加DoEvents

当你想在最后closures表单时,请执行以下操作:

  UserForm.Unload 

这是我会做的:

点击一个button来运行你的macros

 Private Sub Button1_Click() Call userform.show vbMmodeless End Sub Private Sub UserForm_activate() Call Main '-- your macro name End Sub Sub Main() '-- your code DoEvents '-- to update the form *** important useroform.Unload End Sub 

OP显示他的代码之后:

为什么我们需要一个进度条?

当macros需要很长时间运行时,人们会感到紧张。 它崩溃了吗? 需要多长时间? 我有时间去洗手间吗? 放松…

  • 在你的情况下,我真的不知道你正在使用在后台运行的任何forms的代码。 所以添加一个进度条可能会让你的代码变慢以至于更新它,你可能会调用一个额外的循环… 如果你真的想拥有进度条 , 请检查这篇参考文章:) ,

  • 您也可以使用Application.StatusBar来显示一条消息。

  • 另一种是使用Timer或更加技术性的方法来适应系统计时器滴答和刷新/更新的forms。 在VBA Excel中,我们不像C#或VB那样幸运。

  • VBAmacros定时器样式运行代码每个集合的秒数,即120秒 。

  • 如何在Excel中显示运行时钟?

  • 你如何testingVBA代码的运行时间?