没有循环的进度条

时间:2013-03-15 13:59:27

标签: excel vba

我想我已经在整个互联网上搜索了一个简单的进度条,但是我找不到一个在函数/子完成后取得进展的东西。

我将在下面的代码中演示我想要的内容。我在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

5 个答案:

答案 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

达到100%时,请向右侧留出足够的空间