停用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代码的运行时间?