在VBA excel中加载用户窗体时如何显示进度条

时间:2015-06-25 13:54:31

标签: excel-vba vba excel

我使用Userform创建了Macro,它有许多静态控件,并在用户表单初始化时显示。但它也有(Userform初始化代码)代码,使用sheet1中的数据动态地在其中一个框架中添加复选框。这需要一些时间(比如30秒-1分钟),具体取决于表格中的数据。

在此期间,我希望用户显示%完成的进度条。

我尝试了Application.Statusbar功能,但它没有锻炼。所以想去Progressbar吧。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这是我过去五六年来使用的进度条(最初发布在http://www.mrexcel.com/forum/excel-questions/527468-progress-bar.html)。

我会遵循Rorys的建议,如果您要创建数百个控件,请使用列表框。

创建名为“进度条”的表单

给它这些尺寸:
名称:ProgressBar
身高:49.5
宽度:483.75
ShowModal:False< ----这个位很重要,否则它将无法正确更新。

使用以下尺寸向表单添加标签:
名称:BoxProgress
文字说明:BoxProgress
身高:18
左:6
上:6
宽度:468
BackColour:& H008080FF&

在普通模块中添加以下程序:

Sub UpdateProgressBar(n As Long, m As Long, Optional DisplayText As String)
'// DarkSprout April08
'// Omit DisplayText to display progress percentage
On Error GoTo ERR_HANDLE

If n >= m Then
    ProgressBar.Hide
Else
    If ProgressBar.Visible = False Then ProgressBar.Show
    ProgressBar![BoxProgress].Caption = IIf(DisplayText = "", Round(((n / m) * 10000) / 100) & "%", DisplayText)
    ProgressBar![BoxProgress].Width = (n / m) * 468
    DoEvents
End If
Exit Sub

ERR_HANDLE:
    Err.Clear
    ProgressBar.Hide
End Sub

在您的代码中使用它:

Sub test()

    Dim x As Long

    For x = 1 To 100
        UpdateProgressBar x, 100
    Next x

End Sub

每次希望进度条更新时,您都需要调用该过程。

变量:
m 表示条形图的最大数量, n 表示要显示的当前值。