1

我在 Excel vba 中有一些宏,并且我在 Excel 工作表上执行一些功能,这需要大约 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
4

1 回答 1

6

进度条的用途是显示当前运行代码的进度。而且我不知道是否有人想在代码运行时对工作表做任何事情......

无论如何,如果您想在显示表单时与工作表进行交互,您可以尝试添加以下代码:

 UserForm.Show vbvModeless

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

当您想在最后关闭表单时,请执行以下操作:

 UserForm.Unload

这是我要做的:

单击一个按钮以运行您的宏

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显示他的代码后:

为什么我们需要进度条?

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

于 2013-01-17T10:12:44.593 回答