我在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
答案 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展示他的代码后:
在你的情况下,我并没有真正看到你正在使用在后台运行的任何类型的代码。因此,添加进度条可能会使代码变慢,以便更新它,您可能会调用额外的循环... check this reference article if you really want to have the progress bar :),
另一种方法是使用Timer
或更小的技术方法来相应地包装系统计时器滴答和刷新/更新表单。在VBA Excel中,我们没有像C#或VB那样幸运。
VBA Macro On Timer style to run code every set number of seconds, i.e. 120 seconds