停用Excel VBA用户表单

时间:2013-01-17 09:50:59

标签: excel excel-vba userform vba

我在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

1 个答案:

答案 0 :(得分: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展示他的代码后:

为什么我们需要进度条?

  

When macros take a long time to run, people get nervous. Did it crash? How much longer will it take? Do I have time to run to the bathroom? Relax...