我想我已经在整个互联网上搜索了一个简单的进度条,但是我找不到一个在函数/子完成后取得进展的东西。
我将在下面的代码中演示我想要的内容。我在VBA方面的知识基本也是这样的。
我有一个表单,有一个按钮,当我点击按钮时,他应该执行这个:
Sub program()
progressbarform.show
Call function1
"set progressbar to 20%"
Call funcion2
"set progressbar to 40%"
Call function3
"set progressbar to 100%"
"Unload progressbar form"
End Sub
答案 0 :(得分:5)
您可以使用委派来完成这项工作。您的进度条与执行功能1,2和3的形式不同,因此您应该尝试在进度条表单中执行。在调用form.Show后,表单具有焦点,并且在表单关闭之前,函数1,2和3将不会运行。
在进度条窗体中(假设它有标签和进度条控件)放置一个将更新进度条的函数:
Public Sub UpdateProgress(intProgress As Integer, Optional strMessage As String)
If Not IsMissing(strMessage) Then
lbl_Progress.Caption = strMessage
End If
pb_Progress.Value = intProgress
Call Me.Repaint
End Sub
然后,您可以在进度条表单中执行您的功能。您可以通过设置将其称为对象的表单来公开您的函数,或者只将函数1,2和3存储在进度条表单中。
Sub RunFunctions()
UpdateProgress 0, "Starting functions"
UpdateProgress 10, "Begin function1"
Call function1
UpdateProgress 30, "Finished function1"
UpdateProgress 50, "Begin function2"
Call function2
UpdateProgress 70, "Finished function2"
UpdateProgress 90, "Begin function3"
Call function3
UpdateProgress 100, "Finished function3"
UpdateProgress 100, "Finished All Functions"
End Sub
如果您需要帮助设置,请向我提问。
答案 1 :(得分:2)
Sub program()
UserForm1.ProgressBar1.Min = 0
UserForm1.ProgressBar1.Max = 100
UserForm1.ProgressBar1.Value = 0
UserForm1.Show vbModeless
Call function1
UserForm1.ProgressBar1.Value = 20
Call funcion2
UserForm1.ProgressBar1.Value = 40
Call function3
UserForm1.ProgressBar1.Value = 100
End Sub
答案 2 :(得分:1)
您的示例代码可以使用。
执行sub时,代码按顺序运行。因此,当function1
被调用时,下面的代码将在function1
完成之前执行,而所有其他函数也是如此。
最大的问题可能是在表单上获得进度条控件。我试过(非常快)并且由于没有注册库而不允许我添加一个。
您可以使用标准控件创建虚假进度条。
答案 3 :(得分:1)
我不知道我的答案是否有帮助,但是我在主vba中设置了进度条,但没有任何循环。希望这会有所帮助。
我认为,要使用Userform,您必须先在此处添加一些内容以激活该用户窗体,因此probar -----(第二个子名称)将在此激活该用户窗体。代码如下:
Private Sub UserForm_Activate()
progbar
End Sub
第二个子完全是空的,只有子和结尾子,我把它放在模块1中,它是空白模块。
Sub probar()
' leave this macro blank.
End Sub
最后,在主vba中,您可以选择显示百分比和显示条形的时间,而不是循环,您可以自己更改百分比和条形长度,将代码置于这些百分比和这就是我的工作方式。
Public Sub Mainprogram()
'your code Part 1 blah blah blah
UserForm1.Text.Caption = "10% Completed"
UserForm1.bar.Width = 20
UserForm1.Show vbModeless
DoEvents
'your code Part 2 blah blah blah
UserForm1.Text.Caption = "50 % Completed"
UserForm1.bar.Width = 100
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
'your code Part 3 blah blah blah
UserForm1.Text.Caption = "100 % Completed"
UserForm1.bar.Width = 200
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
End Sub
答案 4 :(得分:0)
制作一张包含2 Labels
的表单,第一个用你的进度颜色,另一个用xx%
现在,在每个步骤中,您的脚本都会改变两个Labels
的宽度,以便左Label
变得更宽,右Label
的左侧位置会移动相同数量的像素,更新第二个标签的标题。当您在左侧Label